From f8a9d8defcd5ea6f3fa8f582a6b75f4c8e1cb34a Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Wed, 31 Jul 2024 19:57:47 +0200 Subject: [PATCH] perf(ext/fetch): speed up `resp.clone()` (#24812) (cherry picked from commit b153065e44d6122b30618329df690399b2e319b4) --- ext/fetch/22_body.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ext/fetch/22_body.js b/ext/fetch/22_body.js index e9d4936586..82f41411d8 100644 --- a/ext/fetch/22_body.js +++ b/ext/fetch/22_body.js @@ -196,10 +196,23 @@ class InnerBody { * @returns {InnerBody} */ clone() { - const { 0: out1, 1: out2 } = readableStreamTee(this.stream, true); - this.streamOrStatic = out1; - const second = new InnerBody(out2); - second.source = core.deserialize(core.serialize(this.source)); + let second; + if ( + !ObjectPrototypeIsPrototypeOf( + ReadableStreamPrototype, + this.streamOrStatic, + ) && !this.streamOrStatic.consumed + ) { + second = new InnerBody({ + body: this.streamOrStatic.body, + consumed: false, + }); + } else { + const { 0: out1, 1: out2 } = readableStreamTee(this.stream, true); + this.streamOrStatic = out1; + second = new InnerBody(out2); + } + second.source = this.source; second.length = this.length; return second; }