我应该将js / css文件合并为一个文件吗?


11

双方的YSlow和谷歌的网页速度加载项建议结合脚本(和样式)文件合并为一个文件,每减少HTTP请求的数量,我肯定可以看到这点时,脚本文件是在整个网站一致,但对于整个站点有不同要求的Web应用程序。

我认为它有几种选择:

  1. 合并整个站点上使用的所有文件,并且每个页面都获得相同的合并文件-缺点是未使用的内容使脚本混乱(并且第一次加载较重(当任何组件脚本更改时也会重新加载))

  2. 在每页的基础上合并文件-缺点是具有不同要求的每个页面都会获得不同的合并文件(每种页面类型的首次加载较大)

  3. 忽略对建议的严格的“仅一个文件”解释,并在适当的情况下将页面加载到多个文件中,并希望在一般情况下进行缓存以消除HTTP请求的数量-缺点是每个页面上的HTTP请求数量

有什么想法吗?


你这样做是错的。要么将各部分分成单独的文件,然后进行预热(由更大数量的请求和冷缓存引起),要么以编程方式组合源代码文件到服务器端,每个硬链接仅提供1个js,css,html页面。混合具有不同mime类型的文件=不好。
伊万·普赖斯

并且...就像@Larry Smithmier在回答中所说的那样,使用CDN(例如Google)来交付通用库(例如jquery),以完全避免这些文件的初始缓存预热成本。
伊万·普赖斯

Answers:


11

选项2最糟糕;这意味着具有所需JS脚本的不同组合的每个页面都将导致HTTP请求。这将使性能大大降低

选项1是最好的。最终,大多数用户将访问您网站的大多数页面“类型”,因此将所有内容组合到一个文件中仍然是有利的,也许只有少数很少访问的页面需要大型JS文件。

第一页命中可能比使用不同文件要慢,但是仍然值得这样做,因为其他所有命中页都将使用缓存的全局JS。

一个提示;如果尚未合并,将自动合并它们!


2
虽然您确实需要非常注意主页/登录页面给人的初始印象。如果访问者看到的第一页加载速度很慢,他们可能不会再去看第二页。
pelms,2010年

另一种选择(尤其是在您的网站严重依赖着陆页或第一印象的情况下)将是最大程度地减小在该首页上投放的文件的大小,然后在每隔一页上投放合并的文件。
特拉维斯·诺斯卡特

4

我通常将“全局Javascript”(jQuery和通用插件)组合到一个文件中,然后在需要时将额外的插件作为单独的文件提供。

例如,在我运行的一个网站上,许多页面上都有数据表,因此我有一个global.js带有jQuery,DataTables和SuperFish的菜单。该网站上有两个页面使用“灯箱”,因此我为这两个页面使用了单独的脚本。

对于CSS,我只为整个站点提供一个文件,并尝试使CSS尽可能通用-大多数页面只有几个独特的CSS元素。


1

虽然绝对建议使用尽可能少的文件,但您可能会发现页面加载所需的功能与可以通过异步加载推迟的功能之间存在分歧。

如果可以将足够多的JS放入第二类,则可以提高页面的初始加载速度,从而为用户创造更好的体验。


1

我不建议合并所有这些。如果您使用的是公共库,则可以利用CDN交付您的JavaScript。然后,您可以利用浏览器缓存(假设其他站点使用相同的CDN)和分布式交付。 微软谷歌都有各自的解决方案(我也没有诚实使用过,但我肯定会开始),并且可能还有其他解决方案。在相关说明中,SO存在以下问题:

浏览器何时自动清除JavaScript缓存?

第一个答案是纯金。


2
我已经在使用Google托管的jQuery库,但是我的意思是这个问题是指特定于站点的文件(例如,对于堆栈交换站点,当问一个问题时,您已经有了脚本来搜索类似的问题,该脚本要呈现标记和标记建议,所有这些都可能需要在单独的文件中开发)。顺便说一句,如果您使用Google jQuery托管的js,则1.4和1.4.2都将为您提供相同的内容(目前),而1.4.2则被缓存了一年,而1.4则只被缓存了一个小时。
Cebjyre

酷提示!感谢您对托管jQuery缓存持续时间的深入了解。
拉里·史密斯米尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.