dav*_*ark 34 compression optimization requirejs almond r.js
我在使用RequireJS的网站上有多个页面,并且大多数页面都具有独特的功能.它们共享许多通用模块(jQuery,Backbone等); 所有这些都有自己独特的模块.我想知道使用r.js优化此代码的最佳方法是什么.我看到了RequireJS和Almond的文档和示例的不同部分提出的一些替代方案 - 所以我想出了以下我看到的可能性列表,我问最推荐哪一个(或者是否有另一种更好的方法) :
data-main
语法或普通<script>
标记在所有页面上的公共模块之前加载文件require.js - 根本不使用Almond.这意味着每个页面将有三个JS文件:require.js,通用模块和特定于页面的模块.湾 看起来这个要点建议将Almond插入每个优化文件的方法----所以我不必加载require.js,而是在我的常用模块和我的页面特定模块中包含Almond.是对的吗?这比提前加载require.js更有效吗?感谢您提供的任何建议,以便最好地实现这一目标.
Ben*_*aum 35
我想你已经很清楚地回答了你自己的问题.
对于生产,我们 - 以及我使用选项3的大多数公司.
以下是解决方案3的优点,以及为什么我认为您应该使用它:
这是解决方案2的一个有趣优势:
您将最少的数据发送到每个页面.如果您的很多访问者都是一次,例如在目标网页中 - 这是您最好的选择.在面向转换的场景中,加载时间的重要性不容小觑.
你的访客重复吗?一些研究表明,40%的访问者都有空的缓存.
其他考虑:
如果您的大多数访问者访问单个页面 - 请考虑选项2.选项3非常适合普通用户访问多个网页的网站,但如果用户访问单个网页并且这是他所看到的全部 - 这是您最好的选择.
如果你有很多 JavaScript.考虑加载其中一些以给用户提供可视指示,然后以延迟方式异步加载其余部分(使用脚本标记注入,或者如果您已经使用它,则直接使用require).在UI中注意某些东西"笨重"的人的阈值通常是大约100毫秒.这方面的一个例子是GMail的"加载......".
鉴于HTTP连接默认情况下HTTP连接是保持活动的,或者HTTP/1.0中有额外的标头,因此发送多个文件的问题比5 - 10年前少.确保Keep-Alive
从服务器发送HTTP/1.0客户端的标头.
一些一般性建议和阅读材料:
小智 14
我创建了示例存储库来演示这3种优化.
它可以帮助我们更好地理解如何使用r.js
.
https://github.com/cloudchen/requirejs-bundle-examples