使用Socket.io的异步模块加载(AMD)
Asynchronous module loading(AMD) with Socket.io
我正在开发一个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加载的方法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- AMD应用程序在浏览器中的加载速度是否快于CommonJS应用程序
- 使用Socket.io的异步模块加载(AMD)
- 我可以在网络工作者中加载AMD模块吗
- 为什么串联的 RequireJS AMD 模块需要一个加载器
- AMD 加载的脚本在镶边中不可见
- 如何从道场层加载 AMD 模块
- 角度AMD加载模块不起作用
- 配置需要 js 才能在 javascript 中加载 AMD 模块
- 未捕获错误:按 require.js 加载非 AMD 脚本时没有定义调用
- RequireJS :处理与填充程序和非AMD加载脚本的jQuery冲突
- 如何使用jspm/system.js正确加载本地AMD模块
- 通过AMD加载微风
- RequireJS-在require流和内联中加载AMD模块
- 淘汰赛3.2-'如果'基于AMD加载组件之间的转换
- 哪些脚本加载程序(AMD或非AMD)用于Backbone.jsUnderscore
- Dojo AMD加载器是否确保模块只执行一次?
- 什么是道场AMD加载顺序
- 选择性加载AMD模块使用需求