/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
benchmark/webstreams/creation.js
112 строк
3 KB
Matteo Collina
stream: reduce allocations on WHATWG streams hot paths
20 июн 2026, 17:19
Не верифицирован
20 июн 2026, 17:19
fa2eaa5
Код
Авторство
О чём код?
'use strict'; const common = require('../common.js'); const { ReadableStream, ReadableStreamDefaultReader, ReadableStreamBYOBReader, TransformStream, WritableStream, } = require('node:stream/web'); const assert = require('assert'); const bench = common.createBenchmark(main, { n: [50e3], kind: [ 'ReadableStream', 'TransformStream', 'WritableStream', 'ReadableStreamDefaultReader', 'ReadableStreamBYOBReader', 'ReadableStream.tee', ], }, { // Each case collects garbage right before bench.start() so that the // timed window measures the work under test rather than leftover // GC work from the setup phase. flags: ['--expose-gc'], }); let readableStream; let transformStream; let writableStream; let readableStreamDefaultReader; let readableStreamBYOBReader; let teeResult; function main({ n, kind }) { switch (kind) { case 'ReadableStream': globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) readableStream = new ReadableStream(); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(readableStream); break; case 'WritableStream': globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) writableStream = new WritableStream(); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(writableStream); break; case 'TransformStream': globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) transformStream = new TransformStream(); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(transformStream); break; case 'ReadableStreamDefaultReader': { const readers = Array.from({ length: n }, () => new ReadableStream()); globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) readableStreamDefaultReader = new ReadableStreamDefaultReader(readers[i]); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(readableStreamDefaultReader); break; } case 'ReadableStreamBYOBReader': { const readers = Array.from({ length: n }, () => new ReadableStream({ type: 'bytes' })); globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) readableStreamBYOBReader = new ReadableStreamBYOBReader(readers[i]); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(readableStreamBYOBReader); break; } case 'ReadableStream.tee': { const streams = Array.from({ length: n }, () => new ReadableStream()); globalThis.gc(); bench.start(); for (let i = 0; i < n; ++i) teeResult = streams[i].tee(); bench.end(n); // Avoid V8 deadcode (elimination) assert.ok(teeResult); break; } default: throw new Error('Invalid kind'); } }