From: Evan You Date: Wed, 12 Feb 2025 00:58:22 +0000 (+0800) Subject: perf(vapor): optimize v-if in once mode X-Git-Tag: v3.6.0-alpha.1~16^2~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=222ced28758537bfe9561c68d57a38564af74ab2;p=thirdparty%2Fvuejs%2Fcore.git perf(vapor): optimize v-if in once mode --- diff --git a/packages/runtime-vapor/src/apiCreateIf.ts b/packages/runtime-vapor/src/apiCreateIf.ts index e403531393..947935f88b 100644 --- a/packages/runtime-vapor/src/apiCreateIf.ts +++ b/packages/runtime-vapor/src/apiCreateIf.ts @@ -1,4 +1,4 @@ -import { type BlockFn, DynamicFragment } from './block' +import { type Block, type BlockFn, DynamicFragment } from './block' import { renderEffect } from './renderEffect' export function createIf( @@ -7,12 +7,12 @@ export function createIf( b2?: BlockFn, once?: boolean, // hydrationNode?: Node, -): DynamicFragment { - const frag = __DEV__ ? new DynamicFragment('if') : new DynamicFragment() +): Block { if (once) { - frag.update(condition() ? b1 : b2) + return condition() ? b1() : b2 ? b2() : [] } else { + const frag = __DEV__ ? new DynamicFragment('if') : new DynamicFragment() renderEffect(() => frag.update(condition() ? b1 : b2)) + return frag } - return frag }