Что происходит с комментариями в минимизированном JavaScript? - PullRequest
6 голосов
/ 27 февраля 2012

Что происходит с комментариями в минимизированном файле JavaScript? Как браузер может узнать, когда заканчивается комментарий, когда все сжато до одной строки? Возьмите этот маленький пример, у меня есть код отслеживания Google, как это:

//Google tracking
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

Минимизированная версия тянет все в одну строку

// Google tracking var _gaq = _gaq || []; _gaq.push(['_setAccount', '123456']);

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

Ответы [ 2 ]

4 голосов
/ 27 февраля 2012

Минификаторы удаляют комментарии или вставляют переносы строк.Например, FAQ по компилятору закрытия говорит:

Можно ли использовать компилятор закрытия вместе с другими минифайерами JavaScript?

Да.Closure Compiler считывает любой допустимый JavaScript и генерирует действительный JavaScript, поэтому вы можете применить Closure Compiler к файлу JavaScript либо до, либо после запуска файла через другой минификатор.

Помните, что Closure Compiler и другие минификаторы могутесть ожидания по поводу входящего кода.Минификатор, который удаляет комментарии, может удалить лицензии или информацию аннотации, необходимую для другого инструмента, например.

Иногда вам действительно нужен комментарий, в этом случае они вставляют разрыв строки.

У меня есть уведомления об авторских правах или текст лицензии с открытым исходным кодом, которые должны появиться в моем исходном коде.Как мне не допустить, чтобы компилятор Closure удалил этот текст?

Компилятор Closure поддерживает тег JSDoc @license.Добавьте тег @license к любому комментарию JSDoc, чтобы сохранить комментарий в выходных данных компилятора.Для получения дополнительной информации см. Аннотирование JavaScript для компилятора Closure.

Минификаторы также имеют тенденцию иногда прерывать строки, потому что некоторые парсеры исходного кода интерпретатора аварийно или очень медленно выполняются на очень длинных строках.

https://bugzilla.mozilla.org/show_bug.cgi?id=634444

Раньше, поскольку мы имели дело с кусками, было ограничение на то, сколько строк может содержать сообщение об ошибке.Но теперь сообщение об ошибке содержит всю строку. Если у вас очень длинные строки и много ошибок, это рецепт большого использования памяти , тем более что мы вызываем js_DeflateString() в строке сообщения об ошибке, в результате чего получаем две ее копии (одна из * 1036)* s, другой сделан из char s).

На рассматриваемом сайте произошла куча ошибок в строке, содержащей 122 895 символов, в результате чего в сообщения об ошибках помещалось более 1 ГБ char с (при 3 байтах на char!).

3 голосов
/ 27 февраля 2012

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

Например, если вы вставите

//GOOGLE TRACKING
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

в Закрывающий компилятор с простыми оптимизациями, которые вы получаете

var _gaq=_gaq||[];_gaq.push(["_setAccount","123456"]);

С расширенной оптимизацией вы получаете:

var a=a||[];a.push(["_setAccount","123456"]);

Комментарии удаляются в обоих.

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