Skip to content

Commit 1558cd4

Browse files
tsctxcrysmags
authored andcommitted
perf: avoid Response initialization (nodejs#2489)
1 parent eef4a6e commit 1558cd4

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

lib/fetch/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const {
5454
requestBodyHeader,
5555
subresourceSet
5656
} = require('./constants')
57-
const { kHeadersList } = require('../core/symbols')
57+
const { kHeadersList, kConstruct } = require('../core/symbols')
5858
const EE = require('events')
5959
const { Readable, pipeline } = require('stream')
6060
const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = require('../core/util')
@@ -231,9 +231,10 @@ function fetch (input, init = {}) {
231231

232232
// 4. Set responseObject to the result of creating a Response object,
233233
// given response, "immutable", and relevantRealm.
234-
responseObject = new Response()
234+
responseObject = new Response(kConstruct)
235235
responseObject[kState] = response
236236
responseObject[kRealm] = relevantRealm
237+
responseObject[kHeaders] = new Headers(kConstruct)
237238
responseObject[kHeaders][kHeadersList] = response.headersList
238239
responseObject[kHeaders][kGuard] = 'immutable'
239240
responseObject[kHeaders][kRealm] = relevantRealm

lib/fetch/response.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ class Response {
3838
// The static error() method steps are to return the result of creating a
3939
// Response object, given a new network error, "immutable", and this’s
4040
// relevant Realm.
41-
const responseObject = new Response()
41+
const responseObject = new Response(kConstruct)
4242
responseObject[kState] = makeNetworkError()
4343
responseObject[kRealm] = relevantRealm
44+
responseObject[kHeaders] = new Headers(kConstruct)
4445
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
4546
responseObject[kHeaders][kGuard] = 'immutable'
4647
responseObject[kHeaders][kRealm] = relevantRealm
@@ -66,8 +67,11 @@ class Response {
6667
// 3. Let responseObject be the result of creating a Response object, given a new response,
6768
// "response", and this’s relevant Realm.
6869
const relevantRealm = { settingsObject: {} }
69-
const responseObject = new Response()
70+
const responseObject = new Response(kConstruct)
71+
responseObject[kState] = makeResponse({})
7072
responseObject[kRealm] = relevantRealm
73+
responseObject[kHeaders] = new Headers(kConstruct)
74+
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
7175
responseObject[kHeaders][kGuard] = 'response'
7276
responseObject[kHeaders][kRealm] = relevantRealm
7377

@@ -107,8 +111,11 @@ class Response {
107111

108112
// 4. Let responseObject be the result of creating a Response object,
109113
// given a new response, "immutable", and this’s relevant Realm.
110-
const responseObject = new Response()
114+
const responseObject = new Response(kConstruct)
115+
responseObject[kState] = makeResponse({})
111116
responseObject[kRealm] = relevantRealm
117+
responseObject[kHeaders] = new Headers(kConstruct)
118+
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
112119
responseObject[kHeaders][kGuard] = 'immutable'
113120
responseObject[kHeaders][kRealm] = relevantRealm
114121

@@ -127,6 +134,10 @@ class Response {
127134

128135
// https://fetch.spec.whatwg.org/#dom-response
129136
constructor (body = null, init = {}) {
137+
if (body === kConstruct) {
138+
return
139+
}
140+
130141
if (body !== null) {
131142
body = webidl.converters.BodyInit(body)
132143
}
@@ -258,9 +269,10 @@ class Response {
258269

259270
// 3. Return the result of creating a Response object, given
260271
// clonedResponse, this’s headers’s guard, and this’s relevant Realm.
261-
const clonedResponseObject = new Response()
272+
const clonedResponseObject = new Response(kConstruct)
262273
clonedResponseObject[kState] = clonedResponse
263274
clonedResponseObject[kRealm] = this[kRealm]
275+
clonedResponseObject[kHeaders] = new Headers(kConstruct)
264276
clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList
265277
clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard]
266278
clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm]

0 commit comments

Comments
 (0)