Почему JSZip не сжимает строковые файлы, как это делают десктопные архиваторы?

У меня есть большой объект JS, который я хочу сохранить в локальном хранилище. Я хочу сохранить его сжатым, поэтому я делаю следующее:

JSON.stringify(article).length which gives me 168478

Теперь, если я помещу вывод вышеизложенного в файл .txt в Windows, его размер составит 169246, что близко к выводу для JSON.stringify. Теперь я хочу сжать файл. Я сжал настольную версию с помощью WinRAR в формат .zip, и на выходе получилось 11284, что является существенным сжатием. Теперь я пробую то же самое с JSZip:

zip.file('article1', JSON.stringify(article));
var content = zip.generate({type : "string"});

И если я проверю размер заархивированного содержимого content.length, я получу 176296, что даже больше, чем исходный строковый объект. Значит я что-то не так делаю?


person Max Koretskyi    schedule 07.11.2014    source источник


Ответы (1)


Я думаю, причина в том, что строки в javascript кодируются в UTF-16. Таким образом, текстовый файл ascii размером 10 МБ займет 20 МБ памяти.

person JasmineOT    schedule 21.11.2014
comment
Текст не ограничивается только символами ASCII, он содержит символы языков, для которых требуется 16 МБ. - person Max Koretskyi; 21.11.2014
comment
@Maximus не символы ASCII, может быть, причина не в том, что исходный пакет не удваивается? И кодировка JS, возможно, является причиной того, что вы получаете больший пакет. - person JasmineOT; 22.11.2014
comment
Текст идентичен в Windows и в браузере, поэтому в Windows он также занимает 16 байт на символ. - person Max Koretskyi; 22.11.2014