Простое регулярное выражение для минимизации / сжатия javascript вряд ли будет где-либо существовать.Вероятно, есть несколько веских причин для этого, но вот несколько из этих причин:
Разрывы строк и точки с запятой Хорошие мини-разделители javascript удаляют все дополнительные разрывы строк, но поскольку механизмы javascript будут работать безточки с запятой в конце каждого оператора, минификатор может легко сломать этот код, если он не достаточно сложен для отслеживания и обработки различных стилей кодирования.
Динамические языковые конструкции Многие из хороших миниатюр javascriptavailable также изменит имена ваших переменных и функций для минимизации кода.Например, функция с именем strip_white_space, которая вызывается в вашем файле 12 раз, может быть переименована в простую «a», чтобы сэкономить 192 символа в минимизированном коде.Если ваш файл не содержит большого количества комментариев и / или пробелов, то подобные оптимизации будут источником большинства ваших экономии файлов.
К сожалению, это гораздо сложнее, чем простойрегулярное выражение следует попытаться обработать.Скажем, вы делаете что-то простое, как:
var length = 12, height = 15;
// other code that uses these length and height values
var arr = [1, 2, 3, 4];
for (i = (arr.length - 1); i >= 0; --i) {
//loop code
}
Это все действительный код.НО, как минификатор знает, что заменить?Первый «length» имеет «var» перед ним (но это не обязательно), но перед «height» просто стоит запятая.И если минимизатор достаточно умен, чтобы правильно заменить первую «длину», насколько разумно знать, что НЕ нужно менять слово «длина» при использовании в качестве свойства массива?Было бы еще сложнее, если бы вы определили объект javascript, в котором вы конкретно определили свойство «length» и сослались на него с той же точечной нотацией.
Параметры без регулярных выражений Несколько проектовсуществуют, чтобы решить эту проблему, используя более сложные решения, чем просто регулярное выражение, но многие из них не предпринимают никаких попыток изменить имена переменных, поэтому я все еще придерживаюсь упаковщика Дина Эдвардса или ДугласаJSMin Крокфорда или что-то вроде компрессора YUI .
Реализация PHP JSMin Дугласа Крокфорда
https://github.com/mrclay/minify