


Альтернативные методы сжатия. Распаковка, реализованная на JavaScript
Распаковка, реализованная на JavaScript
На клиентской стороне, на JavaScript реализуют только распаковку данных, сжатие происходит на сервере и может быть реализовано на любом языке программирования.
Ничего необычного в реализации какого-либо алгоритма нет — JavaScript такой же язык программирования, но есть специфика: браузеры, на данный момент, содержат недостаточно оптимизированные интерпретаторы и это необходимо учитывать, иначе распаковка будет выполняться удручающе медленно.
Впрочем, на этом фронте есть улучшения. Новые интерпретаторы языков JavaScript браузеров Firefox, Safari и Google Chrome показывают впечатляющие результаты. Скажем,
реализация на JavaScript сжатия LZW (Lempel-Ziv-Welch, используется в GIF и PDF) (http://zapper.hodgers.com/labs/?p=90) распаковывает, в этих браузерах, библиотеку Prototype 1.6.0.2 (это 123 Кб) на среднем ноутбуке менее чем за одну десятую секунды.
Впрочем, десятая «Опера», последняя на данный момент, показывает куда менее интересное время — полсекунды, а Internet Explorer 8.0 — 0,3 секунды.
В будущем, если там ещ? будут встречаться проблемы с реализацией gzip у браузеров, можно будет использовать реализации достаточно сложных методов сжатия на JavaScript, а в настоящем же приходится довольствоваться чем-то менее ресурсо?мким.
Например, программа «Packer» Дина Эдвардса (http://dean.edwards.name/packer/), использует алгоритм, который автор назвал «Base62», потому что в кодировании используется 62 символа — большие и маленькие латинские буквы, плюс цифры.
Сжимаемый файл разбивается на слова, слова сортируются по частоте их употребления (сначала — наиболее употребительные), им присваиваются номера, которые кодируются алфавитом в 62 символа. Далее происходит замена — в коде слова заменяются их номерами в шестидятитидвухричной системе. На клиенте осуществляется обратная замена.
Этот алгоритм работает достаточно быстро, чтобы накладные расходы на распаковку скрадывались улучшенным временем загрузки.