瀏覽代碼

Minor performance improvements for state getattribute and setattr (#4543)

benedikt-bartscher 5 月之前
父節點
當前提交
c310c020bb
共有 1 個文件被更改,包括 9 次插入7 次删除
  1. 9 7
      reflex/state.py

+ 9 - 7
reflex/state.py

@@ -1240,13 +1240,16 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
         if not super().__getattribute__("__dict__"):
         if not super().__getattribute__("__dict__"):
             return super().__getattribute__(name)
             return super().__getattribute__(name)
 
 
-        inherited_vars = {
-            **super().__getattribute__("inherited_vars"),
-            **super().__getattribute__("inherited_backend_vars"),
-        }
+        # Fast path for dunder
+        if name.startswith("__"):
+            return super().__getattribute__(name)
 
 
         # For now, handle router_data updates as a special case.
         # For now, handle router_data updates as a special case.
-        if name in inherited_vars or name == constants.ROUTER_DATA:
+        if (
+            name == constants.ROUTER_DATA
+            or name in super().__getattribute__("inherited_vars")
+            or name in super().__getattribute__("inherited_backend_vars")
+        ):
             parent_state = super().__getattribute__("parent_state")
             parent_state = super().__getattribute__("parent_state")
             if parent_state is not None:
             if parent_state is not None:
                 return getattr(parent_state, name)
                 return getattr(parent_state, name)
@@ -1301,8 +1304,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
             value = value.__wrapped__
             value = value.__wrapped__
 
 
         # Set the var on the parent state.
         # Set the var on the parent state.
-        inherited_vars = {**self.inherited_vars, **self.inherited_backend_vars}
-        if name in inherited_vars:
+        if name in self.inherited_vars or name in self.inherited_backend_vars:
             setattr(self.parent_state, name, value)
             setattr(self.parent_state, name, value)
             return
             return