2009-04-08 2 views
1

Обратите внимание, что этот вопрос должен быть немного больше на стороне теории субъекта, но, кроме того, чтобы удалить пробелы, какие другие методы используются для JavaScript Compression?Какие методы используют библиотеки сжатия JavaScript для минимизации размера файла?

ответ

1

Большинство компрессоров используют комбинацию различных методов:

  • вскрышных
  • пробелы
  • компресс файл компрессионным (GZIP алгоритму, выкачать)
  • большую часть пространства сохраняется переименование interall переменных и функции в более короткие имена, например:

Эта функция:

function func (variable) { 
    var temp = 2 * variable; 
    return temp; 
} 

станут:

function func (a) { 
    var b = 2 * a; 
    return b; 
} 
  • Дин Эдвардс packer использует некоторое внутреннее сжатие. Сценарий распаковывается, загружается на страницу.
  • Все обычные вещи, чтобы сделать programmcode короче:
    • удалить неиспользуемый код
    • подстановку функций
+0

Будет: функция f (a) {return 2 * a;};) от 72 символов до 27 –

+0

, если вы хотите использовать func для глобальной области javascript, я бы оставил имя как есть ... ;-) – TheHippo

0

Я могу назвать несколько, которые находятся в Google Web Toolkit компилятора:

  • Инлайн метод вызывает
  • Мертвый код элиминации
  • Переменная переименованием/источник запутывания
    • это означает переписывание длинные переменные до коротких и т. д.

Практически все они требуют разбора Javascript (т.е. они работают за пределами чистого лексического анализа).

+0

Это мертвая часть коды пугает меня, как же GWT знает, что код мертв, когда JS имеет глобальный масштаб? Или GWT предназначен для компиляции всего вашего JS сразу и не работает, если вы выполняете его только в одном из нескольких JS-файлов? –

+0

GWT - монолитный компилятор, поэтому, добавив некоторые ограничения на то, что вы можете сделать в java, он может точно определить, вызван ли метод или нет (аналогично тому, что вы можете сделать с eclipse ide). –

1

Off верхней части моей головы ...

  • размечает локальные переменные, а затем переименовывает их в переменную минимально размера.
  • Удаляет тонны пробелов.
  • Удаляет ненужные фигурные скобки (например, выполнение одной строки после того, как операторы if могут удалить фигурные скобки и добавить одну точку с запятой).
  • Удаляет ненужные полуколоны (например, прямо перед конечной скобкой «}»).

Моя наиболее часто используемых Minifier является YUI Compressor и as they state, это с открытым исходным кодом, так что вы можете посмотреть сами на то, что они делают. (Я не уверен, что они подразумевают под «микро-оптимизаций», вероятно, куча редких случаев, которые получают вам символ или два.)

0

код переименование и изменение порядка, так что GZIP компрессор будет иметь лучший результат.

к примеру (не очень умного)

исходного код:

function mul(mul1, mul2) 
{ 
return mul1 * mul2; 
} 

function print(str) 
{ 
    // do something 
} 

function add(add1, add2) 
{ 
return add1 + add2; 
} 

изменить код:

function mul(a,b) 
{ 
return a * b; 
} 

function add(a, b) 
{ 
return a + b; 
} 

function print(str) 
{ 
    // do something 
} 
+0

Я проголосовал за этот ответ, так как вы действительно не отвечали на вопрос, а именно, какие * методы * используются. – rjzii

+0

Извините, Роб, я не прочитал весь вопрос. Новый ответ, надеюсь, я на этот раз лучше :) –

+0

@ Shay - Да, это лучше. – rjzii

Смежные вопросы