mirror of
https://github.com/denoland/deno.git
synced 2025-07-22 20:55:08 +00:00
perf(ext/http): lazy load headers (#15055)
This commit is contained in:
parent
2c2126918b
commit
a2643ae7bd
3 changed files with 50 additions and 12 deletions
|
@ -43,6 +43,8 @@
|
|||
|
||||
const _request = Symbol("request");
|
||||
const _headers = Symbol("headers");
|
||||
const _getHeaders = Symbol("get headers");
|
||||
const _headersCache = Symbol("headers cache");
|
||||
const _signal = Symbol("signal");
|
||||
const _mimeType = Symbol("mime type");
|
||||
const _body = Symbol("body");
|
||||
|
@ -52,7 +54,7 @@
|
|||
* @property {string} method
|
||||
* @property {() => string} url
|
||||
* @property {() => string} currentUrl
|
||||
* @property {[string, string][]} headerList
|
||||
* @property {() => [string, string][]} headerList
|
||||
* @property {null | typeof __window.bootstrap.fetchBody.InnerBody} body
|
||||
* @property {"follow" | "error" | "manual"} redirectMode
|
||||
* @property {number} redirectCount
|
||||
|
@ -64,7 +66,7 @@
|
|||
/**
|
||||
* @param {string} method
|
||||
* @param {string} url
|
||||
* @param {[string, string][]} headerList
|
||||
* @param {() => [string, string][]} headerList
|
||||
* @param {typeof __window.bootstrap.fetchBody.InnerBody} body
|
||||
* @param {boolean} maybeBlob
|
||||
* @returns
|
||||
|
@ -76,7 +78,16 @@
|
|||
}
|
||||
return {
|
||||
method,
|
||||
headerList,
|
||||
headerListInner: null,
|
||||
get headerList() {
|
||||
if (this.headerListInner === null) {
|
||||
this.headerListInner = headerList();
|
||||
}
|
||||
return this.headerListInner;
|
||||
},
|
||||
set headerList(value) {
|
||||
this.headerListInner = value;
|
||||
},
|
||||
body,
|
||||
redirectMode: "follow",
|
||||
redirectCount: 0,
|
||||
|
@ -167,7 +178,21 @@
|
|||
/** @type {InnerRequest} */
|
||||
[_request];
|
||||
/** @type {Headers} */
|
||||
[_headers];
|
||||
[_headersCache];
|
||||
[_getHeaders];
|
||||
|
||||
/** @type {Headers} */
|
||||
get [_headers]() {
|
||||
if (this[_headersCache] === undefined) {
|
||||
this[_headersCache] = this[_getHeaders]();
|
||||
}
|
||||
return this[_headersCache];
|
||||
}
|
||||
|
||||
set [_headers](value) {
|
||||
this[_headersCache] = value;
|
||||
}
|
||||
|
||||
/** @type {AbortSignal} */
|
||||
[_signal];
|
||||
get [_mimeType]() {
|
||||
|
@ -210,7 +235,7 @@
|
|||
// 5.
|
||||
if (typeof input === "string") {
|
||||
const parsedURL = new URL(input, baseURL);
|
||||
request = newInnerRequest("GET", parsedURL.href, [], null, true);
|
||||
request = newInnerRequest("GET", parsedURL.href, () => [], null, true);
|
||||
} else { // 6.
|
||||
if (!ObjectPrototypeIsPrototypeOf(RequestPrototype, input)) {
|
||||
throw new TypeError("Unreachable");
|
||||
|
@ -451,7 +476,7 @@
|
|||
const request = webidl.createBranded(Request);
|
||||
request[_request] = inner;
|
||||
request[_signal] = signal;
|
||||
request[_headers] = headersFromHeaderList(inner.headerList, guard);
|
||||
request[_getHeaders] = () => headersFromHeaderList(inner.headerList, guard);
|
||||
return request;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue