ex4nicegui
ex4nicegui copied to clipboard
rxui.vmodel executes slowly
from nicegui import ui
from ex4nicegui import deep_ref, rxui
from ex4nicegui.utils.signals import to_ref_wrapper
import time
def calculate_execution_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(
f"Function '{func.__name__}' took {end_time - start_time} seconds to execute."
)
return result
return wrapper
@calculate_execution_time
def use_vmodel():
data = deep_ref({"a": "text"})
rxui.label(data)
rxui.input(value=rxui.vmodel(data.value["a"]))
use_vmodel()
@calculate_execution_time
def use_to_wrap():
data = deep_ref({"a": "text"})
def setter(new_value):
data.value["a"] = new_value
wrapper = to_ref_wrapper(lambda: data.value["a"], setter)
rxui.label(data)
rxui.input(value=wrapper)
use_to_wrap()
ui.run()
Using rxui.vmodel is much slower than using to_ref_wrapper
Function 'use_vmodel' took 0.6890246868133545 seconds to execute.
Function 'use_to_wrap' took 0.0 seconds to execute.
Inefficient execution due to vmodel needing to fetch the caller's previous frame. Consider adding a new type of binding
data = deep_ref({"a": "text"})
rxui.input(value=rxui.two_way_binding(data.value,'a'))
now we can :
data = deep_ref({"a": "text"})
rxui.input(value=rxui.vmodel(data,'a'))