From 9167f0c6bda44846a9c54712ae64d05383bdfc3e Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Mon, 27 Sep 2021 13:19:24 +0200 Subject: [PATCH] perf(fetch): optimize newInnerRequest blob url check (#12245) Avoid "blob:" prefix check on requests built in the http module since those can never be blob objects Reduces cost of `newInnerRequest()` from 20ms to 0.1ms in my profiled run on ~2.5M reqs --- ext/fetch/23_request.js | 7 ++++--- ext/http/01_http.js | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ext/fetch/23_request.js b/ext/fetch/23_request.js index bf1683b359..845e47877e 100644 --- a/ext/fetch/23_request.js +++ b/ext/fetch/23_request.js @@ -67,11 +67,12 @@ * @param {string} url * @param {[string, string][]} headerList * @param {typeof __window.bootstrap.fetchBody.InnerBody} body + * @param {boolean} maybeBlob * @returns */ - function newInnerRequest(method, url, headerList = [], body = null) { + function newInnerRequest(method, url, headerList, body, maybeBlob) { let blobUrlEntry = null; - if (url.startsWith("blob:")) { + if (maybeBlob && url.startsWith("blob:")) { blobUrlEntry = blobFromObjectUrl(url); } return { @@ -236,7 +237,7 @@ // 5. if (typeof input === "string") { const parsedURL = new URL(input, baseURL); - request = newInnerRequest("GET", parsedURL.href, [], null); + request = newInnerRequest("GET", parsedURL.href, [], null, true); } else { // 6. if (!(input instanceof Request)) throw new TypeError("Unreachable"); request = input[_request]; diff --git a/ext/http/01_http.js b/ext/http/01_http.js index 723293689f..2681edff89 100644 --- a/ext/http/01_http.js +++ b/ext/http/01_http.js @@ -103,6 +103,7 @@ url, headersList, body !== null ? new InnerBody(body) : null, + false, ); const signal = abortSignal.newSignal(); const request = fromInnerRequest(innerRequest, signal, "immutable");