Почему сбрасывание всех файлов JavaScript в один гигантский файл изменяет их поведение?


1

Я сделал снимок файла jquery.js и jquery-ui файлов, которые я использую, и сбрасывал их в гигантский файл .js со всеми другими .js-файлами, которые я использую для своего сайта.

Когда я делаю это без каких-либо изменений/упаковки, файлы перестают работать, и я получаю «рекурсию слишком глубокие» ошибки в файле, когда я пытаюсь загрузить его на свой сайт, а не в обычные .js-файлы. Все ошибки были получены из jquery и jquery-ui. Используя простую схему нумерации, я убедился, что файлы jquery.js/jquery-ui были первыми указаны в файле и в правильном порядке (то же самое, что и отдельные файлы.)

Два вопроса: 1) Не включает ли теги include для JavaScript те же эффекты, что и сброс всех файлов в один гигантский файл? Есть ли дополнительная изоляция/изоляция, которую файлы JavaScript получают от собственных тегов скриптов или в разных файлах?

2) Моя цель состоит в том, чтобы сделать мой сайт быстрее, имея один огромный файл .js со всеми JavaScript, которые я когда-либо использовал на своем сайте (что тяжело в JQuery) и минимизировало этот файл. Почему это ошибочно? Что это лучший способ сделать это?

ПРИМЕЧАНИЕ: Версия JDuery от Google для CDN не работает для меня, все плагины/темы JQuery, которые я использую, не работают с версиями Google (так или иначе, кто говорит, что они могут успешно использовать CDN от Google.)

ОБНОВЛЕНИЕ: Спасибо за хороший совет в ответах, все это помогло мне узнать больше о развертывании файлов JavaScript на рабочем сервере. Я на самом деле всегда использую последнюю ветвь SVN плагинов JQuery UI, и в плагинах пользовательского интерфейса были ошибки, которые мешали им объединиться вместе с моими файлами. Я получил последние плагины Theme Rolled, которые уже были сокращены в одном файле, и это помогло решить эту проблему.

  0

Какой браузер? Какая версия jQuery? Что говорит jslint о вашем коде? 21 фев. 092009-02-21 22:48:40

  0

Это определенно звучит так, будто у вас есть некоторые синтаксические ошибки, потому что их можно объединить. 22 фев. 092009-02-22 02:24:00

  0

Что такое плагин JQuery, который вы используете, который не работает с CDN от Google? 22 фев. 092009-02-22 04:16:39

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/), подумал likelly он не будет в состоянии справиться с JQuery. Но вы все равно можете объединить все свои файлы и проверить их.


1

Я бы рекомендовал использовать диспетчер сценариев, такой как this one, только для регистрации файлов и необходимых вам плагинов и загрузки их на лету.

Это сдерживает ваши запросы до минимума, и вам не нужно загружать некоторые огромные 300-килобайтные JS-файлы на одну страницу.


0

Другой проблемой может быть изменение порядка загрузки. Большинство файлов JavaScript должен быть порядок загрузки независимыми, но если загрузить JQuery в конце после того, как ваш:

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

вы столкнетесь с проблемами.