On the server side, '+' characters are replaced by ' ' (whitespace) and the resulting string cannot be decompressed.
The fix is ugly but it works and is 100% compatible with old versions.
This ends up being slightly slower on some combinations of OS/Browser, but the process consumes far less memory, and the strings produced as well consumes much less memory.
This avoids calling compress and then re-encoding the results in UTF-16, base64 or URIEncoded string.
As a result:
compressmethod is slightly slower.
compressToEncodedURIComponentare slightly faster (in theory).
- Binary compatibility for decompression is still there. This means any String compressed with an old version of the library can be decompressed by this version, and any String compressed by version 1.4.0 can be decompressed by an older version.
- Binary compatibility for compression is not guaranteed, meaning the output from this version may be different than the output produced by an older version. This is trailing characters that are useless that are now omitted.
The jsperf (Please take them to add more results and help me prove my theory):
NOTE: Releasing this as the performaces seems good except for base64 and uri component on IE. Those don(t take too big of a hit and are designed to send the compressed data to the network (usually internet which is orders of magnitude slower than the compression algo). So I'm going with it.
Added two new methods: compressToEncodedURIComponent: compress into a string that is already URI encoded decompressFromEncodedURIComponent: the associated decompress method