Какие методы используют библиотеки сжатия JavaScript для минимизации размера файла? - PullRequest
1 голос
/ 08 апреля 2009

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

Ответы [ 4 ]

1 голос
/ 08 апреля 2009

С макушки моей головы ...

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

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

1 голос
/ 08 апреля 2009

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

  • удаление пробелов
  • сжать файл алгоритмом сжатия (gzip, deflate)
  • Большая часть пространства сохраняется для переименования переменных и функций intell в более короткие имена, например:

Эта функция:

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

станет:

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

Переименование и переупорядочение кода, чтобы компрессор 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 голосов
/ 08 апреля 2009

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

  • Встроенные вызовы методов
  • Устранение мертвого кода
  • Переименование переменной / обфускация источника
    • это означает переписывание длинных переменных в короткие и т. Д.

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

...