From 98320ff1f88e6b6ee1d85d64e99519986f6a7239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Og=C3=B3rek?= Date: Fri, 2 Jun 2023 17:59:16 +0200 Subject: perf(ext/http): Use flat list of headers for multiple set/get methods (#19336) This PR attempts to resolve the first item on the list from https://github.com/denoland/deno/issues/19330 which is about using a flat list of interleaved key/value pairs, instead of a nested array of tuples. I can tackle some more if you can provide a quick example of using raw v8 arrays, cc @mmastrac --- ext/http/00_serve.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ext/http/00_serve.js') diff --git a/ext/http/00_serve.js b/ext/http/00_serve.js index d84244ee4..dbdc22705 100644 --- a/ext/http/00_serve.js +++ b/ext/http/00_serve.js @@ -334,7 +334,12 @@ class InnerRequest { if (this.#slabId === undefined) { throw new TypeError("request closed"); } - return op_http_get_request_headers(this.#slabId); + const headers = []; + const reqHeaders = op_http_get_request_headers(this.#slabId); + for (let i = 0; i < reqHeaders.length; i += 2) { + headers.push([reqHeaders[i], reqHeaders[i + 1]]); + } + return headers; } get slabId() { @@ -570,7 +575,7 @@ function mapToCallback(context, callback, onError) { if (headers.length == 1) { op_http_set_response_header(req, headers[0][0], headers[0][1]); } else { - op_http_set_response_headers(req, headers); + op_http_set_response_headers(req, headers.flat()); } } -- cgit v1.2.3