From d9a88fea28b4903fe4dfd7c553a2a74a722a0f35 Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Sun, 8 Jun 2025 10:56:26 +0800 Subject: [PATCH] perf(compiler): remove regx for removeStaticBinding --- .../src/transforms/ssrTransformElement.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts index 4a12b0f7ba7..e1d97e1fc5d 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts @@ -39,6 +39,7 @@ import { isBooleanAttr, isBuiltInDirective, isSSRSafeAttrName, + isString, propsToAttrMap, } from '@vue/shared' import { SSRErrorCodes, createSSRCompilerError } from '../errors' @@ -423,9 +424,16 @@ function removeStaticBinding( tag: TemplateLiteral['elements'], binding: string, ) { - const regExp = new RegExp(`^ ${binding}=".+"$`) - - const i = tag.findIndex(e => typeof e === 'string' && regExp.test(e)) + const bindingStart = ` ${binding}="` + // tag must end with at least one character and " + const minLen = bindingStart.length + 2 + const i = tag.findIndex( + e => + isString(e) && + e.length >= minLen && + e.startsWith(bindingStart) && + e[e.length - 1] === '"', + ) if (i > -1) { tag.splice(i, 1)