Безопасно ли минимизировать код JavaScript, который может работать вместе с другими скриптами? - PullRequest
2 голосов
/ 08 сентября 2011

Например, в агрессивном режиме Google Closure переименует функции. Если кто-то включает мой скомпилированный сценарий закрытия вместе с другим сценарием, а кто-то еще также скомпилировал сценарий закрытия, возможно ли возникновение конфликтов переименования?

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

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Вы ВСЕГДА должны беспокоиться о конфликтах переменных, определенных в глобальной области видимости в JavaScript, REGARDLESS о том, минимизируете ли вы свои скрипты или нет.Используйте функциональную оболочку замыкания, чтобы обернуть ваш код, если вы хотите минимизировать вероятность столкновения.

Расширенный режим Closure только усиливает потенциальные коллизии, поскольку он компилирует многие объекты в новые глобальные объекты (которые называются аналогично, например, например,a, b и т. Д.) Для максимальной производительности.Вот почему расширенный режим Closure лучше всего использовать с всеми файлами программы сразу, а не по частям.

Такие вещи, как ga.js (Google Analytics), разработаны так, что они предоставляют только несколько объектовв глобальном масштабе и все остальное завернуто в закрытие.Сам файл агрессивно оптимизирован.Остерегайтесь - тот факт, что он минимизирован / не минимизирован, не имеет ничего общего со столкновениями.У вас может быть файл JavaScript с простым сценарием с множеством коллизий, или у вас может быть сильно оптимизированный скрипт без коллизий.

Коллизии не имеют ничего общего с минификацией или переименованием переменных.Вы избегаете столкновений, избегая создания объектов в глобальной области видимости.Все остальное, что не создано в глобальной области видимости, не вступает в противоречие с другими сценариями.Например, вы CAN столкнетесь ga.js, если загрузите другой скрипт, который перезаписывает глобальные переменные _gat или _gaq.Попробуйте, и Google Analytics больше не будет работать.Другими словами, ga.js работает с различными веб-страницами , а не , потому что он не сталкивается с коллизиями, а потому, что он создает глобальные переменные (то есть _gat и _gaq) с именами, которые очень маловероятно, что будет выбран другими сценариями.

0 голосов
/ 08 сентября 2011

Вам лучше использовать YUICompressor, он намного менее агрессивен и не стремится минимизировать что-либо внешнее.

Проверьте это: - http://developer.yahoo.com/yui/compressor/

...