Редактирование Там, кажется, лучшее решение для LZW, которое обрабатывает строки Unicode правильно в http://pieroxy.net/blog/pages/lz-string/index.html (Благодаря pieroxy в комментариях).
<час>я не знаю ни о каких gzip реализациях, но jsolait библиотека (сайт, кажется, ушел), имеет функции для сжатия/распаковки LZW. Код покрыт под LGPL.
// LZW-compress a string
function lzw_encode(s) {
var dict = {};
var data = (s + "").split("");
var out = [];
var currChar;
var phrase = data[0];
var code = 256;
for (var i=1; i<data.length; i++) {
currChar=data[i];
if (dict[phrase + currChar] != null) {
phrase += currChar;
}
else {
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
dict[phrase + currChar] = code;
code++;
phrase=currChar;
}
}
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
for (var i=0; i<out.length; i++) {
out[i] = String.fromCharCode(out[i]);
}
return out.join("");
}
// Decompress an LZW-encoded string
function lzw_decode(s) {
var dict = {};
var data = (s + "").split("");
var currChar = data[0];
var oldPhrase = currChar;
var out = [currChar];
var code = 256;
var phrase;
for (var i=1; i<data.length; i++) {
var currCode = data[i].charCodeAt(0);
if (currCode < 256) {
phrase = data[i];
}
else {
phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
}
out.push(phrase);
currChar = phrase.charAt(0);
dict[code] = oldPhrase + currChar;
code++;
oldPhrase = phrase;
}
return out.join("");
}
Я предполагаю, что универсальная клиентская реализация сжатия JavaScript была бы очень дорогой операцией с точки зрения времени обработки в противоположность времени трансфера еще нескольких пакетов HTTP с несжатой полезной нагрузкой.
Вы сделали какое-либо тестирование, которое дало бы общее представление Вам, сколько там должно сохранить время? Я имею в виду, сбережения пропускной способности не могут быть тем, что Вы после, или может это?
Большинство браузеров может распаковать gzip на лету. Это могло бы быть более оптимальным вариантом, чем реализация JavaScript.
Можно использовать 1 пиксель на апплет Java на 1 пиксель, встроенный в страницу и использование это для сжатия.
Это не JavaScript, и клиентам будет нужна Среда выполнения Java, но это сделает то, в чем Вы нуждаетесь.
Я не тестировал, но есть реализация ZIP для javascript, которая называется JSZip: