feat: Compress requests using brotli algo#927
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #927 +/- ##
==========================================
- Coverage 94.54% 94.52% -0.03%
==========================================
Files 48 48
Lines 5100 5130 +30
==========================================
+ Hits 4822 4849 +27
- Misses 278 281 +3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
49bf689 to
aabd87c
Compare
- apify/apify-core#28971 added support for brotli compression to BE. - Pros: higher compression, cons: more CPU intensive. - The brotli dependencies are defined as optional, one has to explicitly enable it and choose one. If none is available, the code falls back to gzip. - JS client doesn't compress requests that are too small, this Python client compresses just everything. No change done, I only noticed and stating it.
aabd87c to
f26780a
Compare
|
|
||
| or any other Python package manager that consumes PyPI. | ||
|
|
||
| To enable brotli request-body compression (better than gzip, especially for large payloads), install the optional extra: |
There was a problem hiding this comment.
I'm just wondering whether this should really be the only way to configure the compression method (only via installation of extra), or whether we should introduce a new flag on the ApifyClient base class instead.
@Pijukatel WDYT?
|
This has a significant impact. @Pijukatel, please check it as well. |
- Remove `brotlicffi`, only CPython runtime is supported. - Add a test with bytearray as an input. This would break only in `brotlicffi`, which is no longer in the dependencies. `brotli` dependency handles it correctly and doesn't throw. - Add `brotli` to dev dependencies and use it directly in tests.
- apify/apify-client-python#927 (comment) - The default was 11 (max). Now it uses quality 6 - roughly 2–4× faster with only a modest increase in compressed size.
|
@vdusek Nearly all comments are fixed now, thanks again for your great review. One more thing: I forgot to mention that the JS client skips compression if the payload size is below 1024 B. Do we want to apply it to the Python client as well? |
- apify/apify-client-python#927 (comment) - The default was 11 (max). Now it uses quality 6 - roughly 2–4× faster with only a modest increase in compressed size.
- apify/apify-client-python#927 (comment) - The default was 11 (max). Now it uses quality 6 - roughly 2–4× faster with only a modest increase in compressed size.
Related PRs