Я пишу веб-приложение, которое должно хранить данные JSON в небольшом серверном кэше фиксированного размера через AJAX (подумайте: квоты Opensocial ). У меня нет контроля над сервером.
Мне нужно уменьшить размер хранимых данных, чтобы они не выходили за пределы квоты на стороне сервера, и я надеялся получить возможность сжать зашифрованный JSON в браузере перед его отправкой на сервер.
Однако я не могу найти много способов реализации Gzip на JavaScript. Любые предложения о том, как я могу сжать данные на стороне клиента перед отправкой?
javascript
ajax
compression
gzip
Дэвид Цитрон
источник
источник
Ответы:
Править Похоже, что есть лучшее решение LZW, которое корректно обрабатывает строки Unicode по адресу http://pieroxy.net/blog/pages/lz-string/index.html (благодаря pieroxy в комментариях).
Я не знаю ни одной реализации gzip, но библиотека jsolait (сайт, кажется, ушел) имеет функции для сжатия / распаковки LZW. Код распространяется под LGPL .
источник
У меня была другая проблема, я не хотел кодировать данные в gzip, но декодировать сжатые данные . Я запускаю код JavaScript за пределами браузера, поэтому мне нужно декодировать его с использованием чистого JavaScript.
Это заняло у меня некоторое время, но я обнаружил, что в библиотеке JSXGraph есть способ чтения сжатых данных.
Вот где я нашел библиотеку: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Существует даже отдельная утилита, которая может сделать это, JSXCompressor , и код лицензии LGPL.
Просто включите файл jsxcompressor.js в свой проект, и тогда вы сможете прочитать данные в сжатом формате, закодированные в формате 64:
Я понимаю, что это не то, что вы хотели, но я все еще отвечаю здесь, потому что я подозреваю, что это поможет некоторым людям.
источник
<?php..
немного? .. Я спрашиваю, потому что это передается вdecompress
метод.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Мы только что выпустили pako https://github.com/nodeca/pako , порт zlib для javascript. Я думаю, что сейчас это самая быстрая реализация js для deflate / inflate / gzip / ungzip. Кроме того, он имеет демократическую лицензию MIT. Pako поддерживает все параметры zlib, и его результаты являются бинарными.
Пример:
источник
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@Redsandro вот как я использую Пако.incorrect header check
Я перенес реализацию LZMA из модуля GWT в автономный JavaScript. Это называется LZMA-JS .
источник
Вот некоторые другие алгоритмы сжатия, реализованные в Javascript:
источник
Я не тестировал, но есть реализация ZIP на JavaScript, называемая JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
источник
Я предполагаю, что общая реализация сжатия JavaScript на стороне клиента была бы очень дорогой операцией с точки зрения времени обработки, в отличие от времени передачи еще нескольких пакетов HTTP с несжатой полезной нагрузкой.
Вы провели какое-нибудь тестирование, которое дало бы вам представление о том, сколько времени можно сэкономить? Я имею в виду, экономия полосы пропускания не может быть тем, что вы ищете, или не так
источник
Большинство браузеров могут распаковывать gzip на лету. Это может быть лучшим вариантом, чем реализация javascript.
источник
Вы можете использовать встроенный в страницу Java-апплет 1 пиксель на 1 пиксель и использовать его для сжатия.
Это не JavaScript, и клиентам потребуется среда выполнения Java, но она будет делать то, что вам нужно.
источник