Skip to content

Commit c182c32

Browse files
authoredNov 27, 2023
perf: avoid Headers initialization (#2468)
1 parent 6298bfa commit c182c32

File tree

5 files changed

+14
-11
lines changed

5 files changed

+14
-11
lines changed
 

‎lib/cache/symbols.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict'
22

33
module.exports = {
4-
kConstruct: Symbol('constructable')
4+
kConstruct: require('../core/symbols').kConstruct
55
}

‎lib/core/symbols.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ module.exports = {
5858
kHTTP1BuildRequest: Symbol('http1 build request'),
5959
kHTTP2CopyHeaders: Symbol('http2 copy headers'),
6060
kHTTPConnVersion: Symbol('http connection version'),
61-
kRetryHandlerDefaultRetry: Symbol('retry agent default retry')
61+
kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),
62+
kConstruct: Symbol('constructable')
6263
}

‎lib/fetch/headers.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
'use strict'
44

5-
const { kHeadersList } = require('../core/symbols')
5+
const { kHeadersList, kConstruct } = require('../core/symbols')
66
const { kGuard } = require('./symbols')
77
const { kEnumerableProperty } = require('../core/util')
88
const {
@@ -240,6 +240,9 @@ class HeadersList {
240240
// https://fetch.spec.whatwg.org/#headers-class
241241
class Headers {
242242
constructor (init = undefined) {
243+
if (init === kConstruct) {
244+
return
245+
}
243246
this[kHeadersList] = new HeadersList()
244247

245248
// The new Headers(init) constructor steps are:

‎lib/fetch/request.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@ const { kHeaders, kSignal, kState, kGuard, kRealm } = require('./symbols')
2828
const { webidl } = require('./webidl')
2929
const { getGlobalOrigin } = require('./global')
3030
const { URLSerializer } = require('./dataURL')
31-
const { kHeadersList } = require('../core/symbols')
31+
const { kHeadersList, kConstruct } = require('../core/symbols')
3232
const assert = require('assert')
3333
const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require('events')
3434

3535
let TransformStream = globalThis.TransformStream
3636

37-
const kInit = Symbol('init')
3837
const kAbortController = Symbol('abortController')
3938

4039
const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
@@ -45,7 +44,7 @@ const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
4544
class Request {
4645
// https://fetch.spec.whatwg.org/#dom-request
4746
constructor (input, init = {}) {
48-
if (input === kInit) {
47+
if (input === kConstruct) {
4948
return
5049
}
5150

@@ -398,7 +397,7 @@ class Request {
398397
// 30. Set this’s headers to a new Headers object with this’s relevant
399398
// Realm, whose header list is request’s header list and guard is
400399
// "request".
401-
this[kHeaders] = new Headers()
400+
this[kHeaders] = new Headers(kConstruct)
402401
this[kHeaders][kHeadersList] = request.headersList
403402
this[kHeaders][kGuard] = 'request'
404403
this[kHeaders][kRealm] = this[kRealm]
@@ -725,10 +724,10 @@ class Request {
725724

726725
// 3. Let clonedRequestObject be the result of creating a Request object,
727726
// given clonedRequest, this’s headers’s guard, and this’s relevant Realm.
728-
const clonedRequestObject = new Request(kInit)
727+
const clonedRequestObject = new Request(kConstruct)
729728
clonedRequestObject[kState] = clonedRequest
730729
clonedRequestObject[kRealm] = this[kRealm]
731-
clonedRequestObject[kHeaders] = new Headers()
730+
clonedRequestObject[kHeaders] = new Headers(kConstruct)
732731
clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList
733732
clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard]
734733
clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm]

‎lib/fetch/response.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const { webidl } = require('./webidl')
2323
const { FormData } = require('./formdata')
2424
const { getGlobalOrigin } = require('./global')
2525
const { URLSerializer } = require('./dataURL')
26-
const { kHeadersList } = require('../core/symbols')
26+
const { kHeadersList, kConstruct } = require('../core/symbols')
2727
const assert = require('assert')
2828
const { types } = require('util')
2929

@@ -144,7 +144,7 @@ class Response {
144144
// 2. Set this’s headers to a new Headers object with this’s relevant
145145
// Realm, whose header list is this’s response’s header list and guard
146146
// is "response".
147-
this[kHeaders] = new Headers()
147+
this[kHeaders] = new Headers(kConstruct)
148148
this[kHeaders][kGuard] = 'response'
149149
this[kHeaders][kHeadersList] = this[kState].headersList
150150
this[kHeaders][kRealm] = this[kRealm]

0 commit comments

Comments
 (0)
Please sign in to comment.