在一个大型网站上,requireJS实际上要快多少?
有没有人对使用异步加载的大型网站的速度进行过任何测试?
例如,使用具有大量视图(> 100)的Backbone,最好是简单地让一个视图对象一次性加载所有视图,然后始终可用,或者它们是否应该异步加载根据需要?
此外,移动与桌面的这些注意事项是否有任何差异?我听说你想限制手机上的号而不是大小。
答案 0 :(得分:68)
我不相信 require.js 的意图是在生产中异步加载所有脚本。在开发中,每个脚本的异步加载都很方便,因为您可以对项目进行更改并在没有“编译”步骤的情况下重新加载。但是在生产中,您应combining all of your source files使用r.js optimizer [reference]进入一个或多个更大的模块。如果您的大型Web应用程序可以将模块子集的加载推迟到稍后(例如,在特定用户操作之后),则这些模块可以单独优化并在生产中异步加载。
关于加载单个大型JS文件与多个较小文件的速度,通常为:
“减少HTTP请求”已经成为加速前端性能的一般准则,这一点在当今的移动浏览器世界中更为重要(通常运行在比宽带连接慢一个数量级的网络上) 。 iPhones limit the size of files they cache
但还有其他一些考虑因素,例如:
最后,posted a detailed analysis总结了一堆脚本加载技术。
更新:重新CDN用法:Steve Souders {{3}}使用CDN代表第三方库(例如jQuery),它识别了许多注意事项,优点和缺点。
答案 1 :(得分:9)
这个问题现在有点老了,但我想我可能会加上我的想法。
我完全同意rharper使用r.js将所有代码组合起来进行生产,但也存在分割功能的情况。
对于单页应用程序,我认为将所有内容放在一起是有道理的。对于大规模更传统的基于页面的网页进行页面交互,这可能非常麻烦,导致为很多用户加载大量不必要的代码。
我曾经使用过几次的方法是
这里的优点是您可以保持初始页面权重,并且在页面加载后加载异步的其他脚本时,感知性能应该更快。也就是说,以这种方式加载的所有功能都应该作为渐进增强(即表单上的ajax)进行处理,以便在加载缓慢或错误的情况下仍然可以使用基本功能。