YUI的加载器的组合选项是否会破坏浏览器缓存?

Sea*_*ean 3 javascript yui

因此,如果我使用YUI加载器(在Yahoo的服务器上)来提供JavaScript,并且我告诉它使用组合,那么浏览器可以在单个请求中下载几个YUI Widgets,这不会使它变得更加困难浏览器缓存JavaScript?

假设我有一个包含两个页面的站点,第一个使用YUI日历,对话框和树窗口小部件,浏览器将它们全部合并到YUI服务器的一个组合请求中.

下一页仅使用YUI日历和对话框,但不使用树.这是否意味着它现在在技术上是对雅虎服务器的不同请求,具有不同的查询字符串?这意味着这两个小部件会再次下载,即使它们只是在第一页上使用了吗?

在这种情况下,最好是对组合服务器发出一个请求,这将导致(在许多情况下)无法访问的JavaScript的单个请求?或者对可以缓存的单个YUI组件的几个请求?

(YSlow似乎没有提到这个问题.)

Luk*_*uke 5

最有可能使用组合服务.在第一次访问您的页面时,用户将受到HTTP开销量和与接收每个文件相关的处理开销的惩罚.此外,仍然存在浏览器限制并发连接的问题,因此异步与否,未组合处理的文件将导致更糟糕的页面加载时间.虽然您可以在后续页面上受益于那些单独缓存的文件,但很可能每个页面都会有其他模块请求,这些请求将构成更多的http请求(请记住,在考虑依赖关系后,一个不同的模块可能意味着多个模块请求).所以它相当于第一页的优化网络IO,然后是更大的有效载荷,后续页面上的http开销最小,而非un为第一页优化网络IO,然后在后续页面上使用更多的http开销减少内容.

如果您的站点具有许多启用了js的页面,或者您尝试缓解初始模块加载问题,则可能有理由避免组合.但实际上,如果从装载步骤开始每隔最后几毫秒进行剃须,A)您可能会错过更多富有成效的优化,而B)回答您问题的唯一真正方法是通过分析.

解决您所识别情况的另一种方法是在构造时使用一些自定义汇总模块配置YUI实例,这些模块表示您使用的模块的常见分组.这可能是一项非常复杂的工作,并且自然会引入维护步骤.

总而言之,可能不像你想的那么担心,并且允许使用组合的默认行为很容易.任何明确的答案都将根据具体情况而定,并基于对您的应用进行分析.

  • 此外,对于在两个页面上使用Calendar和Dialog但在一个页面上只使用Tree的特定用例,您可以指定包含Calendar和Dialog的初始使用(..),然后在使用Tree的页面上调用Y.稍后在运行时使用('treeview',...). (2认同)
  • 内联脚本阻止页面呈现,但动态添加的脚本不会.减少内联脚本的数量和大小可以使页面显示得更快.减少HTTP开销上所有节省的脚本数量(动态或非动态),并避免浏览器强加的并发连接限制.您可以包含一个内联脚本,除了为YUI种子+所有请求的模块的组合添加<script>标记之外什么都不做,但是您仍然需要连接一个"就绪"机制来与您的实现代码集成. (2认同)