3

我正在开发一个 Web 应用程序并使用 Socketio 测试 WebSocket 之类的东西。目前我正在考虑一个像 Socketio 的 requierejs 解决方案。它工作正常,我可以加载 Javascript 文件并使用“new Function()”(安全性?)解析它们。如果我使用“正常”(使用脚本元素)AMD 加载文件,性能会更好吗?

system.create.script(['rg.observable', 'rg.route', 'rg.bindings.*', 'rg.utils.*'], function() {

    var bind = function(node) {}
    return bind;

});

谢谢

4

1 回答 1

0

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

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

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

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

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

但是,如果您有一个包含许多模块的大型应用程序,并且您不想一开始就加载所有模块(假设用户每次加载时都不会使用它的所有功能的非常重的东西),那么您可能会认为它可能值得研究。但不同之处在于只有一个 websocket 连接(让我们忽略其他 socket.io 传输,因为它们也使用 http)与 2 或 3(更多,这意味着你做错了!)http 请求。

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

现在谈论一种动态加载模块的好方法和高性能方法,您应该观看这个演讲:Malte Ubl 和 John Hjelmstad:一种新颖、高效的 JavaScript 加载方法

于 2014-04-14T14:24:53.907 回答