2013-02-14 9 views
6

Gibt es eine Javascript-Komprimierung und PHP/Ruby-Dekompression Bibliothek für Strings? Ich brauche es, weil ich eine sehr lange Textzeichenfolge mit Ajax auf einem langsamen Upload-Link zu einem Webserver senden muss, der PHP/Ruby als serverseitige Sprache verwendet.Javascript String-Kompression und PHP/Ruby-Dekompression

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)}); 

Auf Server-Seite (zB PHP):

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

Antwort

4

Es gibt viele JS-Implementierungen der häufigsten Kompressionsalgorithmus, Zip.

Zum Beispiel zip.js

Zip ist natürlich auch supported in PHP.

+0

ah, also muss ich es zuerst in eine Datei schreiben und dann dekomprimieren? – Kokizzu

0

Unter der Annahme, dass Sie Ihre Dateien über HTTP senden, würde ich vorschlagen, dass Sie Ihren Web-Server lassen Handle dies, indem du eine Datei mit gzip content-encoding sendest.

Wenn Sie zum Beispiel Apache verwenden, können Sie mod_deflate

Wenn aus irgendeinem Grund aktivieren können Sie nicht Ihre Web-Server-Konfiguration ändern können, PHP hat auch einen eingebauten in gzip-Handler Sie stattdessen verwenden können. Siehe: ob_gzhandler

Edit:

Wie für Client zum Server, es sieht nicht so aus mit irgendwelchen XmlHttpRequest Implementierungen direkt unterstützt wird. Sie könnten vielleicht einen benutzerdefinierten gzip-Komprimierungsalgorithmus für Javascript finden und dann den Anforderungs-Header so einstellen, dass er komprimiert wird. Auf diese Weise wird er transparent vom Webserver entschlüsselt und Sie müssen nichts Besonderes in PHP machen.

Sehen Sie diese Seite: JavaScript implementation of Gzip.

+1

Sie können Antworten vom Server zum Client komprimieren, aber können Sie auch Anfragen komprimieren? –

+0

Guter Punkt .. Sieht nicht so aus, als ob irgendeine XmlHttpRequest-Implementierung dies unterstützt. – troelskn

+0

Ich denke ein Problem ist, dass der Client nicht weiß, welche Komprimierungsschemata vom Server gehandhabt werden. Dies könnte eine erste Anfrage erfordern, nur um dies zu fragen und so könnte es schmerzhaft sein, in Javascript zu behandeln. –