Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ruby 3 added GC compaction, which generally improves performance, but complicates
Object#object_id
(it's no longer as simple as twiddling with the object's address, since that's no longer stable). Since Ruby 2.7object_id
became more expensive, particularly on its first call for a particular object. There's giantWeakMap
under the hood which tracks the association between objects and their IDs. Here's a great blog post about it.This PR removes usages of
object_id
, and replaces them with faster alternatives. See the individual commits for details.Testing with a 5 MB sample PDF,
CombinePDF.load(file).save("file.pdf)
gets about 1% faster