Saya sedang menulis aplikasi Web yang perlu menyimpan data JSON dalam cache sisi-server berukuran kecil melalui AJAX (pikirkan: Kuota sosial ). Saya tidak punya kendali atas server.
Saya perlu mengurangi ukuran data yang disimpan agar tetap berada di dalam kuota sisi server, dan berharap untuk dapat gzip JSON yang dirubah di browser sebelum mengirimnya ke server.
Namun, saya tidak dapat menemukan banyak cara implementasi JavaScript dari Gzip. Adakah saran untuk bagaimana saya dapat mengompres data di sisi klien sebelum mengirimkannya?
javascript
ajax
compression
gzip
David Citron
sumber
sumber
Jawaban:
Sunting Tampaknya ada solusi LZW yang lebih baik yang menangani string Unicode dengan benar di http://pieroxy.net/blog/pages/lz-string/index.html (Terima kasih kepada pieroxy di komentar).
Saya tidak tahu implementasi gzip, tetapi pustaka jsolait (situsnya sepertinya sudah tidak ada) memiliki fungsi untuk kompresi / dekompresi LZW. Kode ini tercakup dalam LGPL .
sumber
Saya punya masalah lain, saya tidak ingin menyandikan data di gzip tetapi untuk mendekode data gzip . Saya menjalankan kode javascript di luar browser jadi saya perlu mendekode menggunakan murni javascript .
Butuh beberapa waktu tetapi saya menemukan itu di JSXGraph perpustakaan ada cara untuk membaca data yang di-gzip.
Di sinilah saya menemukan perpustakaan: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Bahkan ada utilitas mandiri yang dapat melakukan itu, JSXCompressor , dan kodenya dilisensikan LGPL.
Cukup sertakan file jsxcompressor.js dalam proyek Anda dan kemudian Anda akan dapat membaca 64 data gzip yang disandikan:
Saya mengerti itu bukan apa yang Anda inginkan tetapi saya masih membalas di sini karena saya kira itu akan membantu beberapa orang.
sumber
<?php..
bitnya? .. Saya bertanya karena itu diteruskan kedecompress
metode.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Kami baru saja merilis pako https://github.com/nodeca/pako , port zlib ke javascript. Saya pikir itu sekarang implementasi js tercepat dari mengempis / mengembang / gzip / ungzip. Juga, ia memiliki lisensi MIT yang demokratis. Pako mendukung semua opsi zlib dan hasilnya sama dengan biner.
Contoh:
sumber
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@Redandro inilah cara saya menggunakan pako.incorrect header check
Saya porting implementasi LZMA dari modul GWT ke JavaScript mandiri. Itu disebut LZMA-JS .
sumber
Berikut adalah beberapa algoritma kompresi lain yang diterapkan dalam Javascript:
sumber
Saya tidak menguji, tetapi ada implementasi javascript ZIP, yang disebut JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
sumber
Saya kira implementasi kompresi JavaScript sisi klien generik akan menjadi operasi yang sangat mahal dalam hal waktu pemrosesan dibandingkan dengan waktu transfer beberapa paket HTTP dengan muatan yang tidak terkompresi.
Sudahkah Anda melakukan pengujian yang akan memberi Anda gambaran berapa banyak waktu yang harus dihemat? Maksud saya, penghematan bandwidth tidak bisa seperti yang Anda kejar, atau bisakah?
sumber
Sebagian besar browser dapat mendekompresi gzip dengan cepat. Itu mungkin opsi yang lebih baik daripada implementasi javascript.
sumber
Anda dapat menggunakan applet Java 1 piksel per 1 piksel yang tertanam di halaman dan menggunakannya untuk kompresi.
Ini bukan JavaScript dan klien akan membutuhkan Java runtime tetapi akan melakukan apa yang Anda butuhkan.
sumber