This function serializes and compresses R objects using block compresion with the option of byte shuffling.
There are lots of possible parameters. This function exposes three parameters related to compression level and byte shuffling.
`compress_level` - Higher values tend to have a better compression ratio, while lower values/negative values tend to be quicker.
Due to the format of qs, there is very little benefit to compression levels > 5 or so.
`shuffle_control` - This sets which numerical R object types are subject to byte shuffling.
Generally speaking, the more ordered/sequential an object is (e.g., `1:1e7`), the larger the potential benefit of byte shuffling.
It is not uncommon to have several orders magnitude benefit to compression ratio or compression speed. The more random an object is (e.g., `rnorm(1e7)`),
the less potential benefit there is, even negative benefit is possible. Integer vectors almost always benefit from byte shuffling whereas the results for numeric vectors are mixed.
To control block shuffling, add +1 to the parameter for logical vectors, +2 for integer vectors, +4 for numeric vectors and/or +8 for complex vectors.
The `preset` parameter has several different combination of parameter sets that are performant over a large variety of data.
The `algorithm` parameter, `compression_level` and `shuffle_control`
parameters are ignored unless `preset` is "custom". "fast" preset: algorithm lz4, compress_level 100, shuffle_control 0.
"balanced" preset: algorithm lz4, compress_level 1, shuffle_control 15.
"high" preset: algorithm zstd, compress_level 4, shuffle_control 15.
"archive" preset: algorithm zstd_stream, compress_level 14, shuffle_control 15. (zstd_stream is currently single threaded only)