我正在开发一个 Web 应用程序并测试一些东西,例如使用 Socketio 的 WebSocket。目前我正在考虑像 requierejs 和 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.io传输设置(握手等),然后动态解决依赖关系瀑布效应就在那里发生。

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

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

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


您能澄清一下“amd”的含义吗?