From 9ecae59bbb1a302977afa94fd879a0c6f8d6195f Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sun, 30 Jul 2023 23:51:43 -0700 Subject: Fix memory leak in response.clone(), further reduce memory usage of Request & Response (#3902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Atomize respsone.url & response.statusText * Fix warning * Atomize Request & Response URLs when possible * Fix memory leak in response.clone() bun/bench/snippets on  jarred/atomize ❯ mem bun --smol request-response-clone.mjs cpu: Apple M1 Max runtime: bun 0.7.2 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 -------------------------------------------------------- ----------------------------- req.clone().url 77.3 ns/iter (40.35 ns … 222.64 ns) 91.53 ns 128.11 ns 172.78 ns resp.clone().url 162.43 ns/iter (116 ns … 337.77 ns) 177.4 ns 232.38 ns 262.65 ns Peak memory usage: 60 MB bun/bench/snippets on  jarred/atomize ❯ mem bun-0.7.1 --smol request-response-clone.mjs cpu: Apple M1 Max runtime: bun 0.7.1 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 -------------------------------------------------------- ----------------------------- req.clone().url 115.85 ns/iter (80.35 ns … 247.39 ns) 128.19 ns 181.93 ns 207.23 ns resp.clone().url 252.32 ns/iter (202.6 ns … 351.07 ns) 266.56 ns 325.88 ns 334.73 ns Peak memory usage: 1179 MB * Update tests * Update js_ast.zig * Update test --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- bench/snippets/request-response-clone.mjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 bench/snippets/request-response-clone.mjs (limited to 'bench/snippets/request-response-clone.mjs') diff --git a/bench/snippets/request-response-clone.mjs b/bench/snippets/request-response-clone.mjs new file mode 100644 index 000000000..05a980656 --- /dev/null +++ b/bench/snippets/request-response-clone.mjs @@ -0,0 +1,15 @@ +// This mostly exists to check for a memory leak in response.clone() +import { bench, run } from "./runner.mjs"; + +const req = new Request("http://localhost:3000/"); +const resp = await fetch("http://example.com"); + +bench("req.clone().url", () => { + return req.clone().url; +}); + +bench("resp.clone().url", () => { + return resp.clone().url; +}); + +await run(); -- cgit v1.2.3