⚡️ Speed up method GDAL2Tiles.generate_leaflet by 110%
#29
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.
📄 110% (1.10x) speedup for
GDAL2Tiles.generate_leafletinopendm/tiles/gdal2tiles.py⏱️ Runtime :
662 microseconds→316 microseconds(best of13runs)📝 Explanation and details
The optimized code achieves a 109% speedup through several key improvements:
1. Efficient zoom parsing: Replaced the
minmax.extend([''])+ slice pattern with direct conditional logic to parse min/max zoom values. This eliminates unnecessary list operations when splitting the zoom string.2. Variable caching for repeated access: Added local variables (
title,copyright,swne) to cache frequently accessed object attributes, reducing attribute lookup overhead in the dictionary construction phase.3. F-string conversion: Replaced the expensive
% argsstring formatting with f-string interpolation. F-strings are significantly faster for large template strings as they avoid the overhead of dictionary key lookups during formatting.4. Reduced string operations: By caching
titleandcopyrightin local variables, the.replace()calls are made on cached values rather than repeatedly accessingself.options.titleandself.options.copyright.The test results show consistent 40-130% speedups across different scenarios, with the largest gains in cases with many repeated calls (like
test_large_scale_many_generate_leaflet_callsshowing 130% improvement). The optimizations are particularly effective for template-heavy operations where string formatting dominates the runtime, making this ideal for HTML generation workflows that callgenerate_leaflet()frequently.✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-GDAL2Tiles.generate_leaflet-mh5qqordand push.