ich durchforste das Internet seit gefühlten Wochen vergeblich nach einer äquivalent arbeitenden (und für mich auch verständlichen) Umsetzung von PHP's gzcompress
, gzdeflate
oder gzencode
.
Da ich die Komprimierung (primär erstmal nicht LZW) nutzen möchte, Strings vor dem Übertragen vom Server zum Client und umgekehrt zu verkleinern, frage ich mich, warum LZW so gelobt wird, zumal ja die maximale Anzahl an in einer URL erlaubten Zeichen um die 2000 Zeichen beträgt und LZW in meinem Testfall aus einem 1760 Zeichen langen String einen 3369 Zeichen langen String macht.
Vorneweg solltest du wissen, dass Javascript von Haus aus nicht wirklich dafür geeignet ist, mit Bits und Bytes umzugehen, jedenfalls im klassischen Sinne.
Bei URLs ist es noch schlimmer, die nehmen nicht nur nur Text, der Text ist auch noch auf einen kleinen Satz Zeichen eingeschränkt. Um in einer URL mehr als eine Handvoll Binärdaten zu übertragen, muss man schon _sehr_ gute Gründe haben.
LZW (und sicher die allermeisten anderen Verfahren) arbeitet mit Bits und Bytes. Da bist du mit Javascript und URLs eigentlich schonmal so falsch wie mit Lederpeitsche und Gummimaske auf dem Wiener Opernball - kann man machen, muss man sich aber nicht über das Ergebnis wundern.
Hättest du dir einen kurzen Überblick über die Funktionsweise von LZW geholt, wäre dir aufgefallen, dass LZW 9 bis 12 Bit breite Wörter zurückgibt. Diese Wörter müssen auf Bytes (8 Bit breite Wörter) verteilt und diese Bytes dann wiederum in einen URL-fähigen Text umgewandelt werden. Du kannst Allerweltstexte gar nicht so gut komprimieren, wie die beiden nachfolgenden Schritte die Daten wieder aufblasen.
Ich vermute stark, dass es bei anderen Verfahren am Ende in der URL nicht viel besser aussehen wird.
Könnt ihr mir Umsetzungen in PHP und JavaScript empfehlen?
Ich empfehle dir dringendst, deine Daten per POST zu übertragen. Dafür ist POST da und du scheinst ja auch die Serverseite unter deiner Kontrolle zu haben, kannst dich also darauf einrichten. Warum um alles in der Welt muss es also GET sein?