Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Socket.io异步模块加载(AMD)_Javascript_Node.js_Websocket_Socket.io_Amd - Fatal编程技术网

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

Javascript 使用Socket.io异步模块加载(AMD),javascript,node.js,websocket,socket.io,amd,Javascript,Node.js,Websocket,Socket.io,Amd,我正在开发一个web应用程序,并使用Socketio测试WebSocket之类的东西。目前,我正在考虑一个类似于Socketio的RequireRejs的解决方案。它工作正常,我可以加载Javascript文件并用“new Function()”(安全性?)解析它们。如果使用“普通”(使用脚本元素)AMD加载文件,性能是否会更好 谢谢td;博士,我真的认为不值得花时间在这上面 如果问到性能,我会说您必须在生产环境中尝试 运动部件太多,因此在一种情况下,每个部件可能都会更快。首先是不同的浏览器,在

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


谢谢

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

如果问到性能,我会说您必须在生产环境中尝试

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

但根据我的经验(虽然不多),情况是这样的:

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

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

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


现在谈论一种动态加载模块的好方法和高性能方法,您应该看看这个演讲:

您能澄清一下“amd”是什么意思吗?
system.create.script(['rg.observable', 'rg.route', 'rg.bindings.*', 'rg.utils.*'], function() {

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

});