2012-04-17 3 views
20

Я знаю о similar question но это крошечные откусил от того, что я прошу здесь, так пожалуйста не flag его как дубликат.Почему у нас есть новые строки в мини-JavaScript?

Если вы видите production version of jQuery, то почему через некоторое время появляется символ новой строки? Я загрузил копию и удалил все новые строки (кроме лицензии), и он все еще работал. (Я побежал весь блок тестов против моих изменений на Mozilla Firefox, Google Chrome и Opera.)

The problem. In Google Chrome's "view source"

Я знаю три новые строки (не считая лицензии) не собирается замедлять его вниз много, но все же, не каждая крошечная бит поможет?

Я назначил себе небольшой вызов, чтобы выжать каждый бит производительности из моего кода JavaScript.

+0

Можете вложить соответствующие строки? –

+0

@JamesMontagne, что вы подразумеваете под этим? jQuery? –

+0

Вы запустили ** полный комплект единиц тестирования против ваших изменений? – mgnoonan

ответ

24

jQuery currently use UglifyJS, чтобы минимизировать их исходный код. В their build script, они specifically setmax_line_length директива быть 32 * 1024:

documentation for UglifyJS это сказать на max-line-len директивы;

--max-line-len (по умолчанию 32K символов) - добавьте новую строку после символов около 32 тыс. Символов. Я видел как FF, так и Chrome croak, когда весь код находился на одной строке около 670K. Pass -max-line-len 0, чтобы отключить эту функцию безопасности.

+0

Почему они не удаляют вручную новые строки? –

+6

@ Аниш Гупта, что ты не понял? Они ХОТЯТ новые строки. Они сконфигурировали свой скрипт minify, поэтому он будет устанавливать новые строки там. –

+1

@ Xeon06 Но почему? –

4

Линии (за исключением лицензии) имеют длину около 30 тыс. Символов. Это может быть избежать ошибок, когда некоторые партизаны Javascript умирают на очень длинных очередях. Вероятно, этого не произойдет в сегодняшних браузерах, но, возможно, у некоторых более старых или более неясных есть такие ограничения.


(Старый ответ ниже, который также может применяться, но только не в этом случае)

Это может быть потому, что JSMin, популярный Javascript Minifier сохранит линии каналы на выходе при определенных условиях , Это связано с тем, что в линиях строк Javascript являются значительными, если вы оставьте точку с запятой, например. В документации написано:

Это более консервативно в отношении отсутствия линейных переводов, потому что переводы строк иногда рассматриваются как точки с запятой. Перевод строки не опускается, если он предшествует символ не-ASCII или ASCII буквы или цифры, или один из этих символов:

\ $ _ { [ (+ - 

и если это следует символ, не ASCII или ASCII буквы или цифры, или один из эти символы:

\ $ _ } ]) + - " ' 

Другой minifiers могут иметь аналогичные правила.

Так что это в основном предупреждение о случайном удалении линейного канала, который может потребоваться, с синтаксисом. Последнее, что вы хотите, это то, что ваш миниатюрный JS больше не будет работать, потому что minifier уничтожил его семантику.

Что касается »Я знаю три новых строк (не считая лицензию) не собирается, чтобы замедлить его много, но все же, не каждую крошечный бит помощи«: Когда ваш сервер использует GZIP сжатие разницы будет вероятно, будет спорным в любом случае.

+1

Но почему JQuery не удаляет новые строки в производственной версии. –

+1

Эти правила, похоже, не имеют отношения к тому, где [jQuery 1.7.2.min split] (http://code.jquery.com/jquery-1.7 .2.min.js); первая - между 'G = function (' и 'a)', а вторая находится между 'var a = f' и' .clean (arguments); ' – Matt

+0

Зачем им это? Производственная версия, скорее всего, будет автоматически генерироваться без человеческого взгляда на нее. – Joey

13

процитировать Closure Compiler FAQ:

замыкание Компилятор намеренно добавляет разрывы строк каждые 500 символов или около того.Брандмауэры и прокси иногда коррумпируют или игнорируют большие файлы JavaScript с очень длинными строками. Добавление разрывов строк каждые 500 символов предотвращает эту проблему. Удаление разрывов строк не имеет эффекта на семантику скрипта. Влияние на размер кода невелико, и компилятор оптимизирует размещение строки, чтобы размер кода был еще меньше, если файлы были сгруппированы.

Это относится к любым программам минимизации в целом.

+0

Спасибо, что ответили. Я этого не знал. EDIT: Странно, я написал это некоторое время назад, но он появляется только сейчас? –

+0

Сообщение должно быть застряло между брандмауэром и прокси-сервером. – katspaugh

+0

Никогда не знал, что брандмауэры и прокси могут быть настолько глупыми. PBFAP. Кроме того, кто-нибудь знает пример? Я очень скептически отношусь к тому, что кто-то может так плохо писать брандмауэр, что он развращает файлы (и получает деньги от людей, которые все еще используют его). –