From 68e5cdaff0620b497e265d6e50bae6e994e86144 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Thu, 30 Sep 2021 18:39:55 +0200 Subject: perf(web): ~400x faster http header trimming (#12277) Use a regex substring match with a first/last char fastpath instead of 2 regex replaces. Roughly ~400x faster (423ms vs 0.7ms in profiled runs) --- ext/fetch/20_headers.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) (limited to 'ext/fetch/20_headers.js') diff --git a/ext/fetch/20_headers.js b/ext/fetch/20_headers.js index 67c5d0e65..c35c745b5 100644 --- a/ext/fetch/20_headers.js +++ b/ext/fetch/20_headers.js @@ -15,12 +15,11 @@ const { HTTP_TAB_OR_SPACE_PREFIX_RE, HTTP_TAB_OR_SPACE_SUFFIX_RE, - HTTP_WHITESPACE_PREFIX_RE, - HTTP_WHITESPACE_SUFFIX_RE, HTTP_TOKEN_CODE_POINT_RE, byteLowerCase, collectSequenceOfCodepoints, collectHttpQuotedString, + httpTrim, } = window.__bootstrap.infra; const { ArrayIsArray, @@ -59,17 +58,7 @@ * @returns {string} */ function normalizeHeaderValue(potentialValue) { - potentialValue = StringPrototypeReplaceAll( - potentialValue, - HTTP_WHITESPACE_PREFIX_RE, - "", - ); - potentialValue = StringPrototypeReplaceAll( - potentialValue, - HTTP_WHITESPACE_SUFFIX_RE, - "", - ); - return potentialValue; + return httpTrim(potentialValue); } /** @@ -95,7 +84,7 @@ // Regex matching illegal chars in a header value // deno-lint-ignore no-control-regex - const ILLEGAL_VALUE_CHARS = /[\x00\x0A\x0D]/; + const ILLEGAL_VALUE_CHARS = /[\x00\x0A\x0D]/g; /** * https://fetch.spec.whatwg.org/#concept-headers-append -- cgit v1.2.3