Files
Roberto Bianchi b823c3a21e http2: speed up response getHeaders
Copy validated header names directly into the shallow result instead
of using ObjectAssign on the internal null-prototype map.

Signed-off-by: Roberto Bianchi <roberto.bianchi@spendesk.com>
PR-URL: https://github.com/nodejs/node/pull/66592
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
2026-10-10 13:02:45 +00:00

47 lines
1.1 KiB
JavaScript

'use strict';
const common = require('../common.js');
const assert = require('node:assert');
const http2 = require('node:http2');
const bench = common.createBenchmark(main, {
n: [1e6],
headers: [0, 1, 4, 16, 64],
});
function main({ n, headers }) {
const server = http2.createServer();
server.on('request', (request, response) => {
const expected = { __proto__: null };
for (let index = 0; index < headers; index++) {
const name = `x-header-${index}`;
response.setHeader(name, 'value');
expected[name] = 'value';
}
for (let index = 0; index < 1e4; index++) {
response.getHeaders();
}
let result;
bench.start();
for (let index = 0; index < n; index++) {
result = response.getHeaders();
}
bench.end(n);
assert.deepStrictEqual(result, expected);
response.end();
});
server.listen(0, '127.0.0.1', () => {
const client = http2.connect(`http://127.0.0.1:${server.address().port}`);
const request = client.request();
request.resume();
request.on('end', () => {
client.close();
server.close();
});
request.end();
});
}