⚡️ Speed up function standalone_docs_json_and_render_items by 8%
#152
+63
−35
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.
📄 8% (0.08x) speedup for
standalone_docs_json_and_render_itemsinsrc/bokeh/embed/util.py⏱️ Runtime :
6.38 milliseconds→5.90 milliseconds(best of59runs)📝 Explanation and details
The optimized code achieves an 8% speedup through several targeted micro-optimizations that reduce function call overhead and improve algorithmic efficiency:
Key Optimizations:
Dict access optimization in
standalone_docs_json_and_render_items: Replacedif doc not in docs:check followed by assignment withdocs.setdefault(). This eliminates redundant hash table lookups, saving ~0.5% of total runtime.Short-circuit evaluation in
submodel_has_python_callbacks: Replaced explicit loop with early-break logic usingany()generator expression. This stops iteration immediately when the first model with callbacks is found, avoiding unnecessary model traversal.List comprehension for render items: Changed from appending items in a loop to a single list comprehension, reducing function call overhead and temporary variable assignments.
Eliminated redundant imports in serialization functions: Moved the
from ..core.types import IDimport out ofmake_globally_unique_id(), removing repeated import overhead that was consuming ~18% of the function's time according to the profiler.Optimized UUID generation in
make_globally_unique_css_safe_id: Direct string generation fromuuid.uuid4()instead of callingmake_globally_unique_id()and converting back, reducing function call overhead.Document model filtering improvement: Changed list comprehension to explicit loop for
data_modelscollection, which shows better performance characteristics in the profiler (63.5% vs 65.9% ofto_jsontime).Impact on Hot Paths:
The function is called from
notebook_content()in Jupyter notebook rendering, making these optimizations valuable for interactive data science workflows where plots are frequently generated. The 8% improvement translates to faster notebook cell execution and better user experience when creating multiple visualizations.Test Case Performance:
The optimizations show consistent 5-13% improvements across error handling test cases, indicating the changes maintain correctness while improving performance across different code paths.
✅ Correctness verification report:
⚙️ Existing Unit Tests and Runtime
unit/bokeh/embed/test_util__embed.py::Test_standalone_docs_json.test_outputunit/bokeh/embed/test_util__embed.py::Test_standalone_docs_json_and_render_items.test_exception_for_missing_docunit/bokeh/embed/test_util__embed.py::Test_standalone_docs_json_and_render_items.test_log_warning_if_python_event_callbackunit/bokeh/embed/test_util__embed.py::Test_standalone_docs_json_and_render_items.test_log_warning_if_python_property_callbackunit/bokeh/embed/test_util__embed.py::Test_standalone_docs_json_and_render_items.test_suppress_warnings🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-standalone_docs_json_and_render_items-mhwtcl1land push.