为什么将所有JavaScript文件转储到一个巨型文件中会改变它们的行为?


1

我拍了一张我使用的jquery.js文件和jquery-ui文件的快照,并将它们转储到一个巨大的.js文件中,其中包含我用于我的网站的所有其他.js文件。

当我这样做没有minfication/packing时,文件停止工作,当我尝试将文件加载到我的站点而不是通常的.js文件时,文件停止工作,文件上出现“递归太深”的错误。所有的错误来自jquery和jquery-ui。使用简单的编号方案,我确保jquery.js/jquery-ui文件是第一个以正确顺序列出的文件(与包含单个文件相同)

两个问题: 1) JavaScript的包含标签不会将所有文件转储到一个巨型文件中具有相同的效果吗? JavaScript文件是否存在额外的隔离/绝缘,使其处于其自己的脚本标签或不同文件中?

2)我的目标是通过使用我在网站中使用的所有JavaScript(这在JQuery中很重要)中的一个巨大的.js文件并缩小该文件来使我的网站更快。为什么这是错误的?什么是更好的方法来做到这一点?

注意:Google的CDN版本的JQuery文件不适用于我,我使用的所有JQuery插件/主题都不适用于Google的版本(无论如何谁说他们可以成功使用Google的CDN都在撒谎。 )

更新:感谢在答案中的好建议,它帮助我了解了更多关于在生产服务器上部署JavaScript文件的信息。实际上,我总是使用JQuery UI插件的最新SVN分支,并且UI插件中存在错误,导致它们无法与我的文件合并在一起。我得到了最新的Theme Rolled插件,这些插件已经缩小到一个文件中,并解决了这个问题。

  0

什么浏览器? 什么版本的jQuery? jslint说你的代码是什么? 21 2月. 092009-02-21 22:48:40

  0

这绝对听起来像你有一些语法错误,因为它应该是可以结合起来的。 22 2月. 092009-02-22 02:24:00

  0

什么是您使用的JQuery插件不适用于Google的CDN? 22 2月. 092009-02-22 04:16:39

5

很可能您的JavaScript文件有一些语法错误。浏览器可以在逐个加载文件时进行更正,但当“坏”文件合并时会失败。您可以尝试使用犀牛编译器(http://www.mozilla.org/rhino/

java -cp build/js.jar org.mozilla.javascript.tools.jsc.Main giant.js 

你也可以使用JSLint的验证器(http://www.jslint.com/)编译你的文件,以为likelly它将不能够处理的jQuery。但你仍然可以合并所有你的文件并验证它们。


1

我建议使用脚本管理器(如this one)只注册所需的文件和插件,并在运行中加载它们。

这将您的请求保持在最低限度,并且您不必在一个非常大的页面上加载一些巨大的300k JS文件。


0

另一个问题可能是加载顺序改变。大多数JavaScript文件应该是加载顺序独立的,但如果你在最后加载jquery:

你会遇到问题。