Skip to content

Commit 0046eff

Browse files
committed
http2: optimize neverIndex lookup with SafeSet
Replace array-based neverIndex lookup with SafeSet for O(1) lookup performance. This improves buildNgHeaderString performance from O(n) to O(1) per header, providing significant speedup in hot path scenarios with many headers.
1 parent 5c8ce91 commit 0046eff

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

lib/internal/http2/util.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,10 @@ function buildNgHeaderString(arrayOrMap,
761761

762762
const singles = new SafeSet();
763763
const sensitiveHeaders = arrayOrMap[kSensitiveHeaders] || emptyArray;
764-
const neverIndex = sensitiveHeaders.map((v) => v.toLowerCase());
764+
const neverIndex = new SafeSet();
765+
for (let i = 0; i < sensitiveHeaders.length; i++) {
766+
neverIndex.add(sensitiveHeaders[i].toLowerCase());
767+
}
765768

766769
function processHeader(key, value) {
767770
key = key.toLowerCase();
@@ -787,7 +790,7 @@ function buildNgHeaderString(arrayOrMap,
787790
throw new ERR_HTTP2_HEADER_SINGLE_VALUE(key);
788791
singles.add(key);
789792
}
790-
const flags = neverIndex.includes(key) ?
793+
const flags = neverIndex.has(key) ?
791794
kNeverIndexFlag :
792795
kNoHeaderFlags;
793796
if (key[0] === ':') {

0 commit comments

Comments
 (0)