⚡️ Speed up method InteractiveMigrationQuestioner.ask_rename_model by 17%
#120
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.
📄 17% (0.17x) speedup for
InteractiveMigrationQuestioner.ask_rename_modelindjango/db/migrations/questioner.py⏱️ Runtime :
641 microseconds→548 microseconds(best of319runs)📝 Explanation and details
The optimized code achieves a 17% speedup through two key improvements:
1. Loop Logic Restructuring in
_boolean_input():The original code used a complex
whilecondition that performed multiple operations on each iteration:not result or result[0].lower() not in "yn"required string indexing, lowercasing, and string membership checking every loopThe optimized version restructures this as:
while True:with explicit conditional branches insideans = result[0].lower()once per iterationans in {"y", "n"}which is faster than string membership for single characters2. String Formatting Optimization in
ask_rename_model():The original code used old-style
%formatting with a separate format call:The optimized version uses f-string formatting done once upfront:
F-strings are generally faster than
%formatting, and doing the formatting once rather than during the function call eliminates repeated attribute access and formatting overhead.Performance Impact by Test Case:
The optimizations are most effective for scenarios with either many rename prompts or complex model names, while still providing consistent improvements for simple use cases.
✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-InteractiveMigrationQuestioner.ask_rename_model-mh6nw9ieand push.