Захват zipped текстового файла и разархивирование в клиентских браузерах, возможно в Javascript?

Я разрабатываю веб-страницу, содержащую Javascript. Этот js использует статические строковые данные (около 1-2 МБ), которые хранятся в плоском файле. Я мог бы сжать его с помощью gzip или любого другого алгоритма, чтобы уменьшить нагрузку на передачу.

Можно ли получить этот двоичный файл с помощью Ajax и распаковать его в строку (которую я мог бы разделить позже) в клиентском браузере. Если да, как я могу это достичь? Кто-нибудь имеет пример кода?

Ответ 1

И другая библиотека или сайт - это один, хотя в нем мало примеров, и в нем есть несколько подробных тестовых примеров, которые можно увидеть.

https://github.com/imaya/zlib.js

Вот некоторые из сложных тестовых случаев https://github.com/imaya/zlib.js/blob/master/test/browser-test.js https://github.com/imaya/zlib.js/blob/master/test/browser-plain-test.js

Пример кода кажется очень компактным. Только эти две строки кода...

// compressed = Array.<number> or Uint8Array
var gunzip = new Zlib.Gunzip(compressed);
var plain = gunzip.decompress();

Если вы посмотрите здесь https://github.com/imaya/zlib.js/blob/master/bin/gunzip.min.js, вы увидите, что у вас есть упакованный js файл, который вам нужно будет включить. Возможно, вам потребуется включить одну или две из других в https://github.com/imaya/zlib.js/blob/master/bin.

В любом случае получите эти файлы на свою страницу, а затем подайте объекты GUnzip на ваши предварительно обработанные данные с сервера, а затем они будут такими, как ожидалось.

Вам нужно будет загрузить данные и получить их в массиве самостоятельно, используя другие функции. Я не думаю, что они включают эту поддержку.

Итак, попробуйте эти примеры загрузки из https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data

function load_binary_resource(url) {
  var req = new XMLHttpRequest();
  req.open('GET', url, false);
  req.overrideMimeType('text\/plain; charset=x-user-defined');
  req.send(null);
  if (req.status != 200) return '';
  return req.responseText;
}

// Each byte is now encoded in a 2 byte string character. Just AND it with 0xFF to get the actual byte and then feed that to GUnzip...
var filestream = load_binary_resource(url);
var abyte = filestream.charCodeAt(x) & 0xff; // throw away high-order byte (f7)

===================================== Также есть Node.js

Вопрос аналогичен Простейший способ загрузки и распаковки файлов в кросс-платформе Node.js?

Вот пример кода в документации nodejs. Я не знаю, насколько это более конкретное, чем это... http://nodejs.org/api/zlib.html

Ответ 2

Просто включите сжатие Gzip на вашем Apache, и все будет автоматически выполнено.

Вероятно, вам нужно будет сохранить строку в файле .js как json и включить gzip для типа ms js.

Ответ 3

Я помню, что я использовал js-deflate для оффлайнового JS-приложения с большими базами данных (необходимых из-за ограничений локального хранилища) и работал в совершенстве. Это зависит от js-base64.