import jsc from "bun:jsc"; import { createServer, Server } from "node:http"; import { URL } from "node:url"; import zlib from "node:zlib"; const data = `Create Next App
Next.js logo
  1. Get started by editing app/page.tsx.
  2. Save and see your changes instantly.
`; function listen(server: Server, protocol: string = "http"): Promise { return new Promise((resolve, reject) => { const timeout = setTimeout(() => reject("Timed out"), 5000).unref(); server.listen({ port: 0 }, (err, hostname, port) => { clearTimeout(timeout); if (err) { reject(err); } else { resolve(new URL(`${protocol}://${hostname}:${port}`)); } }); }); } const baseline = process.memoryUsage.rss(); let count = 0; var server = createServer(async (req, res) => { res.writeHead(200, { "Content-Type": "application/gzip" }); const gz = zlib.createGzip(); gz.pipe(res); for (let i = 0; i < 10; i++) gz.write(data); await Bun.sleep(10); for (let i = 0; i < 10; i++) gz.write(data); await Bun.sleep(10); for (let i = 0; i < 10; i++) gz.write(data); for (let i = 0; i < 10; i++) gz.write(data); await Bun.sleep(10); for (let i = 0; i < 10; i++) gz.write(data); for (let i = 0; i < 10; i++) gz.write(data); for (let i = 0; i < 10; i++) gz.write(data); gz.end(); count += 1; if (count % 1000 === 0) { Bun.gc(true); console.log("count", count, process.memoryUsage.rss()); } if (count == 10_000) { Bun.gc(true); const after = process.memoryUsage.rss(); console.log("heapStats", jsc.heapStats()); process.send({ baseline, after }); } }); const url = await listen(server); console.log("server", "listening on", url.port); process.send(url.port);