From 689d22a2709dfaff45a65074df8167ed8fa65088 Mon Sep 17 00:00:00 2001 From: Ayoub Mabrouk Date: Thu, 1 Jan 2026 17:12:37 +0100 Subject: [PATCH] http2: optimize neverIndex SafeSet creation Only create SafeSet when sensitiveHeaders array is non-empty. This optimizes the common case where sensitiveHeaders is empty by avoiding Set creation overhead in the hot path. The optimization maintains correctness for all cases while providing significant performance improvement for the common case where sensitiveHeaders is not explicitly configured. --- lib/internal/http2/util.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/internal/http2/util.js b/lib/internal/http2/util.js index ba981c8934dee9..f3cef424c0a5e8 100644 --- a/lib/internal/http2/util.js +++ b/lib/internal/http2/util.js @@ -761,7 +761,13 @@ function buildNgHeaderString(arrayOrMap, const singles = new SafeSet(); const sensitiveHeaders = arrayOrMap[kSensitiveHeaders] || emptyArray; - const neverIndex = sensitiveHeaders.map((v) => v.toLowerCase()); + let neverIndex = null; + if (sensitiveHeaders.length > 0) { + neverIndex = new SafeSet(); + for (let i = 0; i < sensitiveHeaders.length; i++) { + neverIndex.add(sensitiveHeaders[i].toLowerCase()); + } + } function processHeader(key, value) { key = key.toLowerCase(); @@ -787,7 +793,7 @@ function buildNgHeaderString(arrayOrMap, throw new ERR_HTTP2_HEADER_SINGLE_VALUE(key); singles.add(key); } - const flags = neverIndex.includes(key) ? + const flags = (neverIndex !== null && neverIndex.has(key)) ? kNeverIndexFlag : kNoHeaderFlags; if (key[0] === ':') {