Почему сброс всех файлов JavaScript в один гигантский файл меняет их поведение? - PullRequest
1 голос
/ 22 февраля 2009

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 22 февраля 2009

Возможно, ваши файлы 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 голос
/ 22 февраля 2009

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

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

0 голосов
/ 22 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...