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 加载方法