From 848cda619ec5de6e8bd03783c35ef726824be01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 10 Jun 2023 00:45:56 +0200 Subject: perf: optimize ByteString checks, hoist server rid getter (#19452) Further improves preact SSR and express benches by about 2k RPS. Ref https://github.com/denoland/deno/issues/19451 --- ext/webidl/00_webidl.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'ext/webidl/00_webidl.js') diff --git a/ext/webidl/00_webidl.js b/ext/webidl/00_webidl.js index ca1c7c606..9454dc392 100644 --- a/ext/webidl/00_webidl.js +++ b/ext/webidl/00_webidl.js @@ -59,7 +59,6 @@ const { ReflectHas, ReflectOwnKeys, RegExpPrototypeTest, - RegExpPrototypeExec, SafeRegExp, SafeSet, SetPrototypeEntries, @@ -403,11 +402,19 @@ converters.DOMString = function (V, prefix, context, opts = {}) { return String(V); }; -// deno-lint-ignore no-control-regex -const IS_BYTE_STRING = new SafeRegExp(/^[\x00-\xFF]*$/); +function isByteString(input) { + for (let i = 0; i < input.length; i++) { + if (StringPrototypeCharCodeAt(input, i) > 255) { + // If a character code is greater than 255, it means the string is not a byte string. + return false; + } + } + return true; +} + converters.ByteString = (V, prefix, context, opts) => { const x = converters.DOMString(V, prefix, context, opts); - if (RegExpPrototypeExec(IS_BYTE_STRING, x) === null) { + if (!isByteString(x)) { throw makeException( TypeError, "is not a valid ByteString", -- cgit v1.2.3