From: guaijie <30885718+guaijie@users.noreply.github.com> Date: Sat, 22 Feb 2020 04:17:30 +0000 (+0800) Subject: perf(effect): optimize effect trigger for array length mutation (#761) X-Git-Tag: v3.0.0-alpha.6~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=76c7f5426919f9d29a303263bc54a1e42a66e94b;p=thirdparty%2Fvuejs%2Fcore.git perf(effect): optimize effect trigger for array length mutation (#761) --- diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index c0f4707d83..010aea0020 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -176,17 +176,18 @@ export function trigger( } const effects = new Set() const computedRunners = new Set() - if ( - type === TriggerOpTypes.CLEAR || - (key === 'length' && - isArray(target) && - (newValue as number) < (oldValue as number)) - ) { - // collection being cleared or Array length mutation + if (type === TriggerOpTypes.CLEAR) { + // collection being cleared // trigger all effects for target depsMap.forEach(dep => { addRunners(effects, computedRunners, dep) }) + } else if (key === 'length' && isArray(target)) { + depsMap.forEach((dep, key) => { + if (key === 'length' || key >= (newValue as number)) { + addRunners(effects, computedRunners, dep) + } + }) } else { // schedule runs for SET | ADD | DELETE if (key !== void 0) {