]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(compiler-core): add perf optimization to parseText (#458)
authorGabriel Loiácono <32134586+loiacon@users.noreply.github.com>
Fri, 15 Nov 2019 22:48:01 +0000 (19:48 -0300)
committerEvan You <yyx990803@gmail.com>
Fri, 15 Nov 2019 22:48:01 +0000 (17:48 -0500)
packages/compiler-core/src/parse.ts

index 0b0cf83fa086efdbe91c0b9d61a3758b8e647279..94b71be182e4fdf1ccc481590fd354404551160f 100644 (file)
@@ -767,16 +767,19 @@ function parseInterpolation(
 function parseText(context: ParserContext, mode: TextModes): TextNode {
   __TEST__ && assert(context.source.length > 0)
 
-  const [open] = context.options.delimiters
-  // TODO could probably use some perf optimization
-  const endIndex = Math.min(
-    ...[
-      context.source.indexOf('<', 1),
-      context.source.indexOf(open, 1),
-      mode === TextModes.CDATA ? context.source.indexOf(']]>') : -1,
-      context.source.length
-    ].filter(n => n !== -1)
-  )
+  const endTokens = ['<', context.options.delimiters[0]]
+  if (mode === TextModes.CDATA) {
+    endTokens.push(']]>')
+  }
+
+  let endIndex = context.source.length
+  for (let i = 0; i < endTokens.length; i++) {
+    const index = context.source.indexOf(endTokens[i], 1)
+    if (index !== -1 && endIndex > index) {
+      endIndex = index
+    }
+  }
+
   __TEST__ && assert(endIndex > 0)
 
   const start = getCursor(context)