diff --git a/src/bokeh/util/serialization.py b/src/bokeh/util/serialization.py index a64a504d761..ba94ecccdcb 100644 --- a/src/bokeh/util/serialization.py +++ b/src/bokeh/util/serialization.py @@ -20,7 +20,11 @@ #----------------------------------------------------------------------------- from __future__ import annotations +from bokeh.core.types import ID +from bokeh.settings import settings + import logging # isort:skip + log = logging.getLogger(__name__) #----------------------------------------------------------------------------- @@ -247,7 +251,7 @@ def convert(array: npt.NDArray[Any]) -> npt.NDArray[Any]: return array def make_id() -> ID: - ''' Return a new unique ID for a Bokeh object. + """ Return a new unique ID for a Bokeh object. Normally this function will return simple monotonically increasing integer IDs (as strings) for identifying Bokeh objects within a Document. However, @@ -257,20 +261,21 @@ def make_id() -> ID: Returns: str - ''' + """ global _simple_id - from ..core.types import ID - if settings.simple_ids(): + # Inline reference to ID to avoid dynamic import and reduce function call overhead. with _simple_id_lock: _simple_id += 1 + # Direct call to ID, f-string is fast enough. return ID(f"p{_simple_id}") else: - return make_globally_unique_id() + # Inline make_globally_unique_id implementation to avoid extra function frame and import. + return ID(str(uuid.uuid4())) def make_globally_unique_id() -> ID: - ''' Return a globally unique UUID. + """ Return a globally unique UUID. Some situations, e.g. id'ing dynamically created Divs in HTML documents, always require globally unique IDs. @@ -278,9 +283,7 @@ def make_globally_unique_id() -> ID: Returns: str - ''' - from ..core.types import ID - + """ return ID(str(uuid.uuid4())) def make_globally_unique_css_safe_id() -> ID: