⚡️ Speed up function merge_cookies
by 103% in src/requests/cookies.py
#4
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.
📄
merge_cookies()
insrc/requests/cookies.py
📈 Performance improved by
103%
(1.03x
faster)⏱️ Runtime went down from
35.0 milliseconds
to17.3 milliseconds
(best of88
runs)Explanation and details
The original code is clean, but a few optimizations can be introduced to make it more efficient. We can optimize the list comprehension within the
cookiejar_from_dict
function by converting the existing cookie names to a set for O(1) average-time complexity membership checking. Additionally, we can useupdate
instead of the loop for merging cookies when possible. Here's the optimized version.Explanation of changes.
names_from_jar
ensures that the lookup time complexity is O(1) on average, which is significantly efficient compared to using a list.items
in cookie_dict: Usingitems()
in the dictionary iteration directly provides the key-value pairs, producing cleaner and slightly more efficient code.merge_cookies
function: Simplified the existing loop that adds cookies fromcookies
intocookiejar
.These changes make the code both faster and cleaner while maintaining the original logic and functionality.
Correctness verification
The new optimized code was tested for correctness. The results are listed below.
🔘 (none found) − ⚙️ Existing Unit Tests
✅ 46 Passed − 🌀 Generated Regression Tests
(click to show generated tests)
🔘 (none found) − ⏪ Replay Tests