2011-02-27 14 views
7

Sto cercando di inviare dati dal server in un formato compresso al client (con richieste Ajax) e di decomprimere tali dati con un browser? Esiste una biblioteca per questo?Esiste una libreria disponibile per la compressione in Javascript

Non sto cercando di comprimere i file javascript!

Grazie ...

EDIT: Penso questione non era abbastanza chiaro, non voglio per comprimere i file html, voglio memorizzare alcuni file LZMA compressi o qualsiasi altro formato di compressione sul server (come un file obj), e quindi ho bisogno di decomprimerli dopo averlo ottenuto con AJAX. Compressione/decompressione non simultanea con gzip. Aprire i file zipeed dopo averli ottenuti con Javascript.

+0

Per le risorse statiche, un server configurato correttamente sarà già fare la compressione per voi, e il browser verrà automaticamente decomprimere. Per quelli dinamici come quello che vuoi interrogare, è anche più complicato ma anche possibile. Quale linguaggio lato server usi? –

+0

Si noti che HTTP/1.1 supporta già tre diversi formati di compressione ('gzip', 'deflate' e 'compress'). –

+0

@gkaytck: Qualcosa http://stackoverflow.com/questions/2349210/how-to-compress-data-on-asp-net-and-uncompress-in-javascript help? – wilbbe01

risposta

6

Il server Web (e il browser) devono essere in grado di gestirlo in modo trasparente utilizzando gzip. Il modo in cui questo è configurato dipenderà dal server che stai usando.

Acquista mod_deflate in apache o abilitare gzip in nginx.

Il browser decomprimerà automaticamente i dati prima che raggiungano il gestore XHR e si può essere certi che i dati sono stati compressi il più possibile durante il trasporto.

+0

Questo non vale per le risposte dinamiche. Di solito sono necessari trucchi aggiuntivi per comprimerli. –

+1

Non sai cosa ti fa pensare? A meno che tu non abbia a che fare con qualche tipo di app di streaming.Sia apache che nginx saranno felici di gzipare una risposta dinamica prima di restituirla semplicemente aggiungendo la riga relativa per abilitare la compressione. –

0

Questo sembra essere molto promettente: http://code.google.com/p/jslzjb/

+3

-1, quella libreria è interrotta, restituisce "byte" che sono maggiori di 255. – aaaaaaaaaaaa

+0

Funziona bene per me, e altre soluzioni più sviluppate (basate su nodi) sono state convertite quasi letteralmente da quel codice, senza menzione di problema. – Orwellophile

0

Cosa ha detto Erik, http://code.google.com/p/jslzjb/

Ecco po 'di codice di base per farti andare, e la decodifica.

var stringStreamIn = function(s) { 
    this.data = s; 
    this.length = this.data.length; 
    this.offset = -1; 
    this.readByte = function(){ 
     if (++this.offset >= this.length) { 
      return null; 
     } 
     return this.data.charCodeAt(this.offset); 
    }; 
}; 

var stringStreamOut = function() { 
    this.data = ''; 
    this.length = function() { return this.data.length; }; 
    this.writeByte = function(value) { 
     this.data += String.fromCharCode(value); 
    }; 
}; 

var so = new stringStreamOut(); 
var si = new stringStreamIn(atob("XQAAgAD//////////wAnG8AHA8+NCpYMj8Bgfez6bsJh4zoZx3fA+gih10oOa6rwYfkaucJIKX8T69I5iOe8WJwg/Ta7x3eHeDomxR6Vf824NLmKSrWHKdnM9n0D2aipzLbHv5//sTGAAA==")); 
LZMA.decompressFile(si, so); 
console.log(so.data); 
Problemi correlati