summaryrefslogtreecommitdiff
path: root/ext/http/00_serve.js
diff options
context:
space:
mode:
authorKamil Ogórek <kamil.ogorek@gmail.com>2023-06-02 17:59:16 +0200
committerGitHub <noreply@github.com>2023-06-02 09:59:16 -0600
commit98320ff1f88e6b6ee1d85d64e99519986f6a7239 (patch)
tree21adde93dba24a7279bc57fe13049b59cace0372 /ext/http/00_serve.js
parentf5c1ff08e6c67c38043b4c76b5472ad71c93d697 (diff)
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
Diffstat (limited to 'ext/http/00_serve.js')
-rw-r--r--ext/http/00_serve.js9
1 files changed, 7 insertions, 2 deletions
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());
}
}