2013-02-14 13 views
6

Esiste una compressione JavaScript e una libreria di decompressione PHP/Ruby per le stringhe? Ne ho bisogno perché ho bisogno di inviare una stringa di testo molto lunga usando Ajax su un link di caricamento lento a un server web che usa PHP/Ruby come linguaggio lato server.Compressione stringa JavaScript e decompressione PHP/Ruby

var x = $('#sources').html(); 
// a very-very long text 
var xo = x, o = {}; 
if(x.length>512*1024) { 
    x = compress(x); 
    o.c = 1; 
} 
o.x = x; 
$.post('target.php',o,function(res){alert(res==xo)}); 

Sul lato server (ad esempio, PHP):

<?php 
    if(isset($_POST['c']) && $_POST['c']=='1') { 
    $x = decompress($_POST['x']); 
    } else { 
    $x = $_POST['x']; 
    } 
    echo $x; 

risposta

4

Ci sono molte implementazioni di JS l'algoritmo di compressione più comune, Zip.

Ad esempio zip.js

Zip è naturalmente anche supported in PHP.

+0

ah, quindi devo scriverlo prima in un file, quindi decomprimerlo? – Kokizzu

0

Supponendo che si inviano i file su HTTP, vorrei suggerire che si lascia che il tuo web server gestisci questo inviando file con codifica del contenuto gzip.

Se ad esempio si utilizza Apache, è possibile attivare mod_deflate

Se per qualche motivo non è possibile modificare la configurazione del server web, php ha anche un built-in gestore gzip è possibile utilizzare invece. Vedere: ob_gzhandler

Edit:

Per quanto riguarda i client al server, non sembra come questo è direttamente supportato da eventuali implementazioni XMLHttpRequest. Potresti trovare un algoritmo di compressione gzip personalizzato per Javascript e quindi impostare l'intestazione della richiesta per indicare che è compresso. In questo modo viene decodificato in modo trasparente dal server web e non devi fare nulla di speciale in php.

Vedere questa pagina: JavaScript implementation of Gzip.

+1

È possibile comprimere le risposte dal server al client ma è possibile comprimere anche le richieste? –

+0

Buon punto .. Non sembra che nessuna implementazione XmlHttpRequest supporti questo. – troelskn

+0

Penso che un problema è che il client non sa quali schemi di compressione sono gestiti dal server. Questo potrebbe richiedere una prima richiesta solo per chiedere questo e quindi potrebbe essere doloroso da gestire in javascript. –