在大型网站上,requireJS 实际上快了多少?
有没有人对使用异步加载与不使用异步加载的大型网站的速度进行过任何测试?
例如,使用带有大量视图(> 100)的 Backbone,最好是简单地使用一个视图对象来一次加载所有视图然后始终可用,还是应该根据需要异步加载它们?
此外,对于移动设备与桌面设备的这些注意事项是否有任何区别?我听说您想限制移动设备上的请求数量而不是大小。
在大型网站上,requireJS 实际上快了多少?
有没有人对使用异步加载与不使用异步加载的大型网站的速度进行过任何测试?
例如,使用带有大量视图(> 100)的 Backbone,最好是简单地使用一个视图对象来一次加载所有视图然后始终可用,还是应该根据需要异步加载它们?
此外,对于移动设备与桌面设备的这些注意事项是否有任何区别?我听说您想限制移动设备上的请求数量而不是大小。
我不相信require.js的目的是在生产中异步加载所有脚本。在开发过程中,每个脚本的异步加载都很方便,因为您可以对项目进行更改并重新加载,而无需“编译”步骤。但是在生产中,您应该使用r.js 优化器将所有源文件组合成一个或多个更大的模块。如果您的大型 web 应用程序可以将模块子集的加载推迟到稍后时间(例如,在特定用户操作之后),这些模块可以单独优化并在生产中异步加载。
关于加载单个大 JS 文件与加载多个小文件的速度,一般来说:
“减少 HTTP 请求”已成为提高前端性能的普遍准则,这在当今的移动浏览器世界中更为相关(通常在比宽带连接慢一个数量级的网络上运行)。 [参考]
但还有其他考虑因素,例如:
最后,这是 Steve Souders 的一篇好文章,总结了一堆脚本加载技术。
更新:关于CDN 的使用:Steve Souders发布了关于将 CDN 用于 3rd 方库(例如 jQuery)的详细分析,其中确定了许多注意事项、优缺点。
这个问题现在有点老了,但我想我可以补充一下我的想法。
我完全同意rharper使用 r.js 将所有代码组合起来进行生产,但也有拆分功能的情况。
对于单页应用程序,我认为将所有内容放在一起是有意义的。对于具有页面交互的大型更传统的基于页面的网站,这可能非常麻烦,并导致为许多用户加载大量不必要的代码。
我用过几次的方法是
这里的优点是您可以降低初始页面权重,并且由于在页面加载后异步加载其他脚本,因此感知性能应该更快。也就是说,以这种方式加载的所有功能都应该作为渐进增强(即表单上的ajax)来完成,以便在加载缓慢或错误的情况下,基本功能仍然可用。