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

时间:2010-06-19 10:16:42

标签: javascript yui

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

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

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

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

(YSlow似乎没有提及这个问题。)

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

我想你可能想要静态加载你实际使用的所有内容,并将所有内容缩小为生产版本中的一个文件。

有关YUI page静态加载的信息,但它基本上归结为使用脚本标记为您的所有文件,就像使用普通的javascript和使用调用看起来像这样:

YUI().use('*', function(Y) {
    // Any modules that were already loaded on the page statically will now be
    // attached and ready to use. YUI will not automatically load any modules
    // that weren't already on the page.
});

我之前并没有过多地参与设置缩小,但我上一个项目中使用的那个是Uglify我认为