perf(reactivity): improve reactive effect memory usage (#4001)
Based on #2345 , but with smaller API change - Use class implementation for `ReactiveEffect` - Switch internal creation of effects to use the class constructor - Avoid options object allocation - Avoid creating bound effect runner function (used in schedulers) when not necessary. - Consumes ~17% less memory compared to last commit - Introduces a very minor breaking change: the `scheduler` option passed to `effect` no longer receives the runner function.
This commit is contained in:
@@ -59,6 +59,7 @@ import { currentRenderingInstance } from './componentRenderContext'
|
||||
import { startMeasure, endMeasure } from './profiling'
|
||||
import { convertLegacyRenderFn } from './compat/renderFn'
|
||||
import { globalCompatConfig, validateCompatConfig } from './compat/compatConfig'
|
||||
import { SchedulerJob } from './scheduler'
|
||||
|
||||
export type Data = Record<string, unknown>
|
||||
|
||||
@@ -217,9 +218,14 @@ export interface ComponentInternalInstance {
|
||||
*/
|
||||
subTree: VNode
|
||||
/**
|
||||
* The reactive effect for rendering and patching the component. Callable.
|
||||
* Main update effect
|
||||
* @internal
|
||||
*/
|
||||
update: ReactiveEffect
|
||||
effect: ReactiveEffect
|
||||
/**
|
||||
* Bound effect runner to be passed to schedulers
|
||||
*/
|
||||
update: SchedulerJob
|
||||
/**
|
||||
* The render function that returns vdom tree.
|
||||
* @internal
|
||||
@@ -445,6 +451,7 @@ export function createComponentInstance(
|
||||
root: null!, // to be immediately set
|
||||
next: null,
|
||||
subTree: null!, // will be set synchronously right after creation
|
||||
effect: null!, // will be set synchronously right after creation
|
||||
update: null!, // will be set synchronously right after creation
|
||||
render: null,
|
||||
proxy: null,
|
||||
|
||||
Reference in New Issue
Block a user