New
v1.0.0
Breaking changes
- Set ruby 2.7 as the lowest supported ruby version.
There are no public API breaking changes.
Improvements
- it passes the h2spec compliance suite.
- RBS signatures.
- Using the :buffer kwarg from Array#pack to reduce string allocations
- Using #drop_while enumerable function to drop timed out recently closed streams, which reduced the complexity of it from O(n) to O(log n), making a difference in a few benchmarks.
- optimization for header decompression of static headers.
- it was identified that traversing the static headers table for each incoming header was one of the bottlenecks, and it was O(n) for all cases where there was not an exact match. In order to circumvent this, an additional table derived from the static headers table with the header field as lookup key was created, which eliminated the main bottleneck (at the cost of roughly 1.5Kb extra).
- HTTPX::Buffer has been removed, and was replaced by String usage with an enhanced API via refinements.
- Using String#byteslice in significant chunks of the parsing process.
- Removed usage of Time.now and replaced it with monotonic time calculations.