From: Evan You Date: Fri, 20 Sep 2019 01:18:18 +0000 (-0400) Subject: perf(compiler): further improve advanceBy perf X-Git-Tag: v3.0.0-alpha.0~745 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=98571ab496cbf4d8a5e0df091d19d3206b9ed1eb;p=thirdparty%2Fvuejs%2Fcore.git perf(compiler): further improve advanceBy perf --- diff --git a/packages/compiler-core/src/utils.ts b/packages/compiler-core/src/utils.ts index ccea3ce80a..354b8ec1b2 100644 --- a/packages/compiler-core/src/utils.ts +++ b/packages/compiler-core/src/utils.ts @@ -36,15 +36,21 @@ export function advancePositionWithMutation( ): Position { __DEV__ && assert(numberOfCharacters <= source.length) - const str = source.slice(0, numberOfCharacters) - const lines = str.split(/\r?\n/) + let linesCount = 0 + let lastNewLinePos = -1 + for (let i = 0; i < numberOfCharacters; i++) { + if (source.charCodeAt(i) === 10 /* newline char code */) { + linesCount++ + lastNewLinePos = i + } + } pos.offset += numberOfCharacters - pos.line += lines.length - 1 + pos.line += linesCount pos.column = - lines.length === 1 + lastNewLinePos === -1 ? pos.column + numberOfCharacters - : Math.max(1, lines.pop()!.length) + : Math.max(1, numberOfCharacters - lastNewLinePos - 1) return pos }