多个JavaScript文件,合并成一个。

5

我正在开发ASP.NET MVC并使用多个JavaScript文件,例如jQuery、jQuery UI、Google Maps和自己的JavaScript文件等。

为了提高性能,我应该将它们合并成一个文件吗?如果是这样,应该怎么做?


4个回答

11
您希望将多个文件合并为一个文件,以减少http请求的延迟时间。请求越少,效果越好。然而,许多新型浏览器可以并行下载JavaScript文件(仍按顺序执行)。结果是,下载单个1Mb文件可能比下载三个350Kb文件更慢。我分成了三个包:

  • 外部库文件(jquery,flot,插件)
  • 内部库文件(多个页面共享)
  • 页面特定文件(仅这个页面使用,也许由两个页面使用)

这样,我既不会在启动时有过多的http请求,又不会出现无法从并行下载中获益的单个文件。

CSS也是如此,每个页面加载三个CSS包。因此,在总体上,我们的页面下载了六个打包文件加上主html文件。我认为这是一个很好的折衷方案。您可能发现,不同的文件分组方式对您更好,但我的建议是不要创建单个包,除非它是一个单页面应用程序。如果您发现自己经常将相同的文件放入不同的包中,则是时候重新考虑捆绑策略了,因为您正在多次下载相同的内容。

要使用什么?Martijn的建议很好。根据我的经验,YUI是最广泛使用的,这是我之前和当前工作所使用的。


2

0
如果它们都将包含在您的所有页面上,那么没有什么区别。但是,如果有些只与某些页面相关,则从技术上讲最好将它们分开,并仅在相关页面上包含相关内容。

-1
据我所知,您确实应该减少文件数量,因为这意味着用户在首次加载页面时会获得更好的性能。因此,他们将节省一小部分时间。但是,在这些文件被缓存之后,它们就没有任何区别了...
我没有深入研究过JavaScript引擎本身,但是一个文件中的函数将以相同的方式处理,无论它是在大文件还是小文件中。因此,在执行方面没有任何区别。
因此,为了节省时间,请不要改变任何东西,因为这将花费您太多的时间,而回报却很少,特别是当您发现您需要最新版本的jQuery(顺便说一下,今天发布了新版本),并且您必须重新连接所有内容...

将多个JS文件合并成一个文件时,可能会出现变量命名冲突的问题,如果在不同的文件中有两个变量名称相同。变量的作用域在不同的文件或同一文件中是不同的。 - Cedric
3
没有文件作用域变量,它们要么是全局的,要么是局部的函数变量。因此,Cedric提到的问题不存在。 - Ruan Mendes

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