Вопрос по javascript, performance – Почему у нас есть новые строки в уменьшенном JavaScript?

21

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

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

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

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

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

Можете ли вы включить соответствующие строки? James Montagne
@AnishGupta, что он имеет в виду, вы сказали, "и это все еще работает". Как вы можете быть уверены, чтоeverything еще работает? Вы запускали юнит-тесты? Alex Turpin
@JamesMontagne, что ты имеешь в виду под этим? из jQuery? Anish Gupta
Вы управлялиentire блок юнит тестов против ваших изменений? mgnoonan
@mgnoonan Какой тестовый блок? Anish Gupta

Ваш Ответ

3   ответа
13

FAQ по компилятору:

The Closure Compiler intentionally adds line breaks every 500 characters or so. Firewalls and proxies sometimes corrupt or ignore large JavaScript files with very long lines. Adding line breaks every 500 characters prevents this problem. Removing the line breaks has no effect on a script's semantics. The impact on code size is small, and the Compiler optimizes line break placement so that the code size penalty is even smaller when files are gzipped.

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

Никогда не знал, что брандмауэры и прокси могут быть такими глупыми. PBFAP. Кроме того, кто-нибудь знает пример? Я действительно скептически отношусь к тому, что кто-то может написать брандмауэр настолько плохо, что он испортит файлы (и получит оплату от людей, все еще использующих его).
Сообщение должно быть застряло между брандмауэром и прокси-сервером.
Спасибо за ответы. Я этого не знал. РЕДАКТИРОВАТЬ: странно, я написал это некоторое время назад, но он только сейчас появляется ??? Anish Gupta
25

JQuery в настоящее время используют UglifyJS, чтобы минимизировать их исходный код. Вих сценарий сборки, Oниспециально установлен max_line_length директива быть32 * 1024:

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

--max-line-len (default 32K characters) — add a newline after around 32K characters. I’ve seen both FF and Chrome croak when all the code was on a single line of around 670K. Pass –max-line-len 0 to disable this safety feature.

@AnishGupta, что ты не получаешь? Они хотят новых строк. Они настроили свой скрипт minify так, чтобы он помещал туда новые строки.
@AnishGupta, потому что, как сказал Мэтт и другие, слишком длинные строки могут вызвать проблемы в некоторых браузерах.
Это правда для самой последней версии FF и Chrome?
Почему они не удаляют символы новой строки вручную? Anish Gupta
@ Xeon06 Но почему? Anish Gupta
4

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

(Old answer below, which might also be applicable, just not in this case)

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

It is more conservative in omitting linefeeds, because linefeeds are sometimes treated as semicolons. A linefeed is not omitted if it precedes a non-ASCII character or an ASCII letter or digit or one of these characters:

\ $ _ { [ ( + -

and if it follows a non-ASCII character or an ASCII letter or digit or one of these characters:

\ $ _ } ] ) + - " '

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

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

относительно»I know three newlines (not counting the license) is not going to slow it down a lot, but still, doesn't every tiny bit help?«Когда ваш сервер использует GZIP сжатие разница, вероятно, будет в любом случае спорным вопросом.

@ Джой, как я уже сказал в ответ. Каждый по нитке. Anish Gupta
Зачем им? Производственная версия, скорее всего, будет автоматически сгенерирована, и человек не будет ее просматривать.
Но почему jQuery не удаляет переводы строк в рабочей версии? Anish Gupta
Эти правила не имеют отношения кjQuery 1.7.2.min is split; первый междуG=function( а такжеa) а второй междуvar a=f а также.clean(arguments);

Похожие вопросы