合并多个JavaScript文件

14

我读到过将多个JavaScript文件合并为一个单独的文件可以提高性能,这是真的吗?

如果是这样,是否有一种简单且无误差的方法来合并它们,或者可能有在线工具可以自动完成?

非常感谢。


1
我不认为这是正确的 - 一个庞大的js文件下载需要更长时间,并且作为一个庞大的文件,页面上只有25%(或更少)的js被使用存在风险。 - OMG Ponies
这取决于有多少文件。正如前面的评论者所指出的那样,将所有JS文件放在所有页面都加载的位置可能会导致您加载大量不相关的JS。但是,如果您将所有常用代码组合成3个文件中的1个文件,则可以减少页面加载的HTTP请求次数,从而提高页面加载速度。 - mopoke
加载多个文件而不是单个文件肯定会更慢,因为您的浏览器需要建立多个HTTP连接来加载这些文件,并且建立HTTP连接会有一些成本。 - Nayan
4个回答

16

参见多个JavaScript / CSS文件:最佳实践? 在PHP中提升JavaScript性能

简单来说,您要尽量减少外部HTTP请求。最好的方法是强制浏览器缓存服务器上的文件,直到它们发生更改为止。您可以通过为文件提供版本信息并提供远期到期头来实现这一点。当更改文件名(通过更改版本)时,浏览器将获取新版本。

如果您这样做,那么多个Javascript文件就不是很重要了。但是,如果您强制客户端在每个页面上下载27个JS文件而没有缓存,则减少文件数量可能会产生实质性的差异。当然,这仍然不如有效的缓存/版本控制策略。

另一个更近期的问题需要考虑:iPhone缓存

iPhone不会缓存 大于15K的组件 (之前的实验中为25K)

因此,在某些情况下,合并文件可能会产生负面影响。


为什么对客户撒谎是“最好的”?至少Firefox会有条件地请求js文件等(使用If-Modified-Since)。不需要玩弄文件名。 - just somebody
当你提到缓存时,所谓的“files”指的是网页,而不是Javascript,对吗? - OMG Ponies
不,我的意思是静态内容通常指(Javascript、CSS、图像)。这些应该被积极缓存。谁说过“撒谎”了?你基本上是在告诉客户端“在我告诉你它已经改变之前,不要再请求它”。这很好。 - cletus
合并文件有一个主要的优点。您不需要使用像requirejs这样的库来正确加载所需顺序的文件。 - Abhijeet Pathak

3
如果你有很多JavaScript文件,将它们合并并进行缩小可以提高性能。通过将它们组合成一个单独的文件,您可以减少从您的站点下载的连接和文件数量。通过缩小它们,您实际上通过删除空格、注释等来减少文件的大小。可以看看JSMin和YUI Compressor。
编辑: 正如其他评论者所指出的,仅当用户正在积极使用所有文件的功能时,合并文件才真正有意义。将一个大且很少使用的JavaScript文件与所有常用函数合并是没有意义的。

3

0

你可以尝试使用pakd.io,它可以合并CSS和JS文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接