From 7f8a94b48e04a2fe78b0d5fd056e3332d1b8a430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Tue, 30 Jan 2024 22:17:34 +0800 Subject: [PATCH] refactor(compiler-vapor): fast path for string --- packages/compiler-vapor/src/generate.ts | 10 +++++++--- packages/compiler-vapor/src/generators/dom.ts | 14 +++++++------- packages/compiler-vapor/src/generators/event.ts | 13 ++++++------- packages/compiler-vapor/src/generators/html.ts | 2 +- .../compiler-vapor/src/generators/modelValue.ts | 2 +- packages/compiler-vapor/src/generators/prop.ts | 2 +- packages/compiler-vapor/src/generators/text.ts | 2 +- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index b24e231a2..9910b3d28 100644 --- a/packages/compiler-vapor/src/generate.ts +++ b/packages/compiler-vapor/src/generate.ts @@ -56,9 +56,12 @@ export interface CodegenContext { newline(): CodeFragment multi( codes: [left: string, right: string, segment: string], - ...fn: Array + ...fn: Array + ): CodeFragment[] + call( + name: string, + ...args: Array ): CodeFragment[] - call(name: string, ...args: Array): CodeFragment[] withIndent(fn: () => T): T helpers: Set @@ -116,8 +119,9 @@ function createCodegenContext(ir: RootIRNode, options: CodegenOptions) { const frag: CodeFragment[] = [] fns = fns.filter(Boolean) frag.push(left) - for (const [i, fn] of fns.entries()) { + for (let [i, fn] of fns.entries()) { if (fn) { + if (isString(fn)) fn = [fn] frag.push(...fn) if (i < fns.length - 1) frag.push(seg) } diff --git a/packages/compiler-vapor/src/generators/dom.ts b/packages/compiler-vapor/src/generators/dom.ts index f30b8c6d8..c4e859bd4 100644 --- a/packages/compiler-vapor/src/generators/dom.ts +++ b/packages/compiler-vapor/src/generators/dom.ts @@ -16,9 +16,9 @@ export function genInsertNode( newline(), ...call( vaporHelper('insert'), - [element], - [`n${oper.parent}`], - [`n${oper.anchor}`], + element, + `n${oper.parent}`, + `n${oper.anchor}`, ), ] } @@ -31,8 +31,8 @@ export function genPrependNode( newline(), ...call( vaporHelper('prepend'), - [`n${oper.parent}`], - ...oper.elements.map(el => [`n${el}`]), + `n${oper.parent}`, + ...oper.elements.map(el => `n${el}`), ), ] } @@ -46,8 +46,8 @@ export function genAppendNode( newline(), ...call( vaporHelper('append'), - [`n${oper.parent}`], - ...oper.elements.map(el => [`n${el}`]), + `n${oper.parent}`, + ...oper.elements.map(el => `n${el}`), ), ] } diff --git a/packages/compiler-vapor/src/generators/event.ts b/packages/compiler-vapor/src/generators/event.ts index 7d79b579e..e8e6d30dd 100644 --- a/packages/compiler-vapor/src/generators/event.ts +++ b/packages/compiler-vapor/src/generators/event.ts @@ -16,13 +16,12 @@ export function genSetEvent( const name = genName() const handler = genFinalizedHandler() - const opt = !!options.length && [ - `{ ${options.map(v => `${v}: true`).join(', ')} }`, - ] + const opt = + !!options.length && `{ ${options.map(v => `${v}: true`).join(', ')} }` return [ newline(), - ...call(vaporHelper('on'), [`n${oper.element}`], name, handler, opt), + ...call(vaporHelper('on'), `n${oper.element}`, name, handler, opt), ] function genName(): CodeFragment[] { @@ -38,7 +37,7 @@ export function genSetEvent( } } - function genEventHandler(): CodeFragment[] { + function genEventHandler() { const exp = oper.value if (exp && exp.content.trim()) { const isMemberExp = isMemberExpression(exp.content, ctxOptions) @@ -64,10 +63,10 @@ export function genSetEvent( } } } - return ['() => {}'] + return '() => {}' } - function genFinalizedHandler(): CodeFragment[] { + function genFinalizedHandler() { let expr = genEventHandler() if (nonKeys.length) { diff --git a/packages/compiler-vapor/src/generators/html.ts b/packages/compiler-vapor/src/generators/html.ts index f6188fd72..803bab3a1 100644 --- a/packages/compiler-vapor/src/generators/html.ts +++ b/packages/compiler-vapor/src/generators/html.ts @@ -11,7 +11,7 @@ export function genSetHtml( newline(), ...call( vaporHelper('setHtml'), - [`n${oper.element}`], + `n${oper.element}`, genExpression(oper.value, context), ), ] diff --git a/packages/compiler-vapor/src/generators/modelValue.ts b/packages/compiler-vapor/src/generators/modelValue.ts index b50d22334..4295f7477 100644 --- a/packages/compiler-vapor/src/generators/modelValue.ts +++ b/packages/compiler-vapor/src/generators/modelValue.ts @@ -19,7 +19,7 @@ export function genSetModelValue( return [ newline(), - ...call(vaporHelper('on'), [`n${oper.element}`], name, handler), + ...call(vaporHelper('on'), `n${oper.element}`, name, handler), ] function genName(): CodeFragment[] { diff --git a/packages/compiler-vapor/src/generators/prop.ts b/packages/compiler-vapor/src/generators/prop.ts index e8f17e934..85af01ec4 100644 --- a/packages/compiler-vapor/src/generators/prop.ts +++ b/packages/compiler-vapor/src/generators/prop.ts @@ -9,7 +9,7 @@ export function genSetProp( ): CodeFragment[] { const { call, newline, vaporHelper, helper } = context - const element = [`n${oper.element}`] + const element = `n${oper.element}` const expr = genExpression(oper.key, context) // fast path for static props diff --git a/packages/compiler-vapor/src/generators/text.ts b/packages/compiler-vapor/src/generators/text.ts index 4ece21119..194749862 100644 --- a/packages/compiler-vapor/src/generators/text.ts +++ b/packages/compiler-vapor/src/generators/text.ts @@ -11,7 +11,7 @@ export function genSetText( newline(), ...call( vaporHelper('setText'), - [`n${oper.element}`], + `n${oper.element}`, genExpression(oper.value, context), ), ]