Подтвердить что ты не робот

Почему у нас есть новые строки в мини-JavaScript?

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

Когда вы видите производственную версию jQuery, почему после этого появляется новая строка? Я загрузил копию и удалил все новые строки (кроме лицензии), и он все еще работал. (Я запускал пакет целиком unit test против моих изменений в Mozilla Firefox, Google Chrome и Opera.)

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

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

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

4b9b3361

Ответ 1

jQuery в настоящее время использует UglifyJS для минимизации исходного кода. В их построить script, они специально настроены директива max_line_length должна быть 32 * 1024:

документация для UglifyJS имеет это в директиве max-line-len;

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

Ответ 2

Чтобы указать Частые вопросы компилятора Closure:

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

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

Ответ 3

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


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

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

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

\ $ _ { [ ( + -

и если он следует за символом, отличным от ASCII, или буквой ASCII или цифрой или одним из следующих символов:

\ $ _ } ] ) + - " '

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

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

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