使用Socket.io的异步模块加载(AMD)

Asynchronous module loading(AMD) with Socket.io

本文关键字:加载 AMD 模块 异步 Socket io 使用      更新时间:2023-09-26

我正在开发一个web应用程序,并用Socketio测试一些东西,比如WebSocket。目前,我正在考虑一个解决方案,比如使用Socketio的安魂曲。它运行得很好,我可以加载Javascript文件并用"new Function()"(安全性?)解析它们。如果我用"正常"(使用脚本元素)AMD加载文件,性能会更好吗?

system.create.script(['rg.observable', 'rg.route', 'rg.bindings.*', 'rg.utils.*'], function() {
    var bind = function(node) {}
    return bind;
});

感谢

td;博士,我真的认为不值得花时间。

问起性能,我真的会说你必须在你的生产环境中尝试一下。

有太多的运动部件,所以在一种情况下每个部件都可能更快。首先是不同的浏览器,每个浏览器在不同的地方可能更快或更慢。根据浏览器和网络支持,socket.io有不同的传输方式(并非所有地方都支持websocket)。然后是客户端网络,它可能具有高或低带宽或延迟。此外,服务器的负载和服务器的数量可能会影响哪一个更快。

但根据我的经验(虽然不多),这就是它的样子:

如果您的应用程序足够小,我建议您只需将requirejs模块编译并压缩到一个或两个文件中,然后使用常规http即可。在大多数情况下,它应该比动态加载socket.io更快,因为你必须等待socket.io脚本下载和执行,等待socket.i0传输设置(握手等),然后动态解析依赖关系,瀑布效应就在那里发生。

但是,如果你有一个包含许多模块的巨大应用程序,而你不想在一开始就全部加载(比如说一些非常重的应用程序,用户每次加载时都不会使用它的所有功能),那么你可能会认为它可能值得一试。但区别在于只有一个websocket连接(让我们忽略其他socket.io传输,因为它们也使用http)与2或3(更重要的是,这意味着你做错了!)http请求。

从技术上讲,如果你使用http保持活动,那么假设你得到了正确的设置,它们应该花费相同的时间,因为浏览器会保持http连接活动一分钟或更长时间,所以你不会创建新的连接,所以它类似于websocket连接。现在,如果你加入SPDY,那么使用socket.io可能会更慢,因为这只是一个额外的开销。

现在讨论一种动态加载模块的好的、高性能的方法,您应该看看下面的演讲:Malte-Ubl&John Hjelmstad:一种新颖、高效的JavaScript加载的方法