⚡️ Speed up percentage()
by 40% in posthog/templatetags/posthog_filters.py
#40
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.
📄
percentage()
inposthog/templatetags/posthog_filters.py
📈 Performance improved by
40%
(0.40x
faster)⏱️ Runtime went down from
35.0 microseconds
to25.0 microseconds
Explanation and details
Why these changes?
We initially refactored the code to opt for a more modern and efficient way of string formatting using f-strings.
Then, we combined this with lazy evaluation to remove unnecessary computations.
In the final stages, we micro-optimized by introducing constant pre-calculation and single-line conditionals.
Correctness
The better micro-optimized code maintains the same functionality as the original code.
Thus, it produces the same outputs for the same inputs and has the same side effects.
How is this faster?
The use of f-strings improves string formatting speed.
Lazy evaluation immediately returns for None values, avoiding unnecessary calculations.
Removing repeated computations (e.g., pre-calculating constant multipliers) reduces the computational overhead.
Single-line conditionals make the execution path shorter and more efficient.
Correctness verification
The new optimized code was tested for correctness. The results are listed below.
🔘 (none found) − ⚙️ Existing Unit Tests
✅ 21 Passed − 🌀 Generated Regression Tests
(click to show generated tests)
🔘 (none found) − ⏪ Replay Tests