Skip to content

Commit d1e7d8e

Browse files
authored
Improve HtmlTokenizer.AtToken performance. (dotnet/razor#1880)
Our razor typing test measured 153 CPU ms in this method. Optimized by fewer calls to CurrentCharacter, not checking '<' twice, and uswing a switch stmt.\n\nCommit migrated from dotnet/razor@c601c2f
1 parent f701a18 commit d1e7d8e

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlTokenizer.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -253,21 +253,27 @@ private SyntaxToken Newline()
253253
return EndToken(SyntaxKind.NewLine);
254254
}
255255

256-
private bool AtToken()
256+
private bool AtToken()
257257
{
258-
return CurrentCharacter == '<' ||
259-
CurrentCharacter == '<' ||
260-
CurrentCharacter == '!' ||
261-
CurrentCharacter == '/' ||
262-
CurrentCharacter == '?' ||
263-
CurrentCharacter == '[' ||
264-
CurrentCharacter == '>' ||
265-
CurrentCharacter == ']' ||
266-
CurrentCharacter == '=' ||
267-
CurrentCharacter == '"' ||
268-
CurrentCharacter == '\'' ||
269-
CurrentCharacter == '@' ||
270-
(CurrentCharacter == '-' && Peek() == '-');
258+
switch (CurrentCharacter)
259+
{
260+
case '<':
261+
case '!':
262+
case '/':
263+
case '?':
264+
case '[':
265+
case '>':
266+
case ']':
267+
case '=':
268+
case '"':
269+
case '\'':
270+
case '@':
271+
return true;
272+
case '-':
273+
return Peek() == '-';
274+
}
275+
276+
return false;
271277
}
272278

273279
private StateResult Transition(HtmlTokenizerState state)

0 commit comments

Comments
 (0)