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

时间:2009-02-21 22:25:03

标签: javascript jquery jquery-ui

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

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

两个问题: 1)JavaScript的include标签是否与将所有文件转储到一个巨大的文件中具有相同的效果? JavaScript文件是否存在于自己的脚本标签或不同文件中的额外隔离/绝缘?

2)我的目标是通过拥有一个巨大的.js文件来加快我的网站速度,该文件包含我在我的网站中使用的所有JavaScript(在JQuery中很重)并缩小该文件。为什么这被误导了?有什么更好的方法呢?

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

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

3 个答案:

答案 0 :(得分:5)

可能您的JavaScript文件存在一些语法错误。浏览器可以在逐个加载文件时更正它们,但在“坏”文件组合时失败。您可以尝试使用Rhino编译器(http://www.mozilla.org/rhino/

编译文件
java -cp build/js.jar org.mozilla.javascript.tools.jsc.Main giant.js

你也可以使用JSLint验证器(http://www.jslint.com/),想象它将无法处理jQuery。但您仍然可以将所有 文件合并并验证它们。

答案 1 :(得分:1)

我建议使用this one之类的脚本管理器来注册您需要的文件和插件,并即时加载它们。

这可以将您的请求降至最低,而且您不必在一页上加载一些巨大的300k JS文件。

答案 2 :(得分:0)

另一个问题可能是加载顺序发生了变化。大多数JavaScript文件应该是独立于加载顺序的,但是如果你在得到之后加载了jquery:

$(document).ready(function() {});

你会遇到问题。