/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
benchmark/streams/iter-creation.js
99 строк
3 KB
James M Snell
benchmark: add benchmarks for experimental stream/iter
28 мар 2026, 05:55
28 мар 2026, 05:55
e78ccd8
Код
Авторство
О чём код?
// Object creation overhead benchmark. // Measures the cost of constructing stream infrastructure (no data flow). 'use strict'; const common = require('../common.js'); const { Readable, Writable, Transform, PassThrough } = require('stream'); const { ok } = require('assert'); const bench = common.createBenchmark(main, { api: ['classic', 'webstream', 'iter'], type: ['readable', 'writable', 'transform', 'pair'], n: [1e5], }, { flags: ['--experimental-stream-iter'], // Iter has no standalone Transform class; transforms are plain functions. combinationFilter: ({ api, type }) => !(api === 'iter' && type === 'transform'), }); function main({ api, type, n }) { switch (api) { case 'classic': return benchClassic(type, n); case 'webstream': return benchWebStream(type, n); case 'iter': return benchIter(type, n); } } function benchClassic(type, n) { let tmp; bench.start(); switch (type) { case 'readable': for (let i = 0; i < n; i++) tmp = new Readable({ read() {} }); break; case 'writable': for (let i = 0; i < n; i++) tmp = new Writable({ write(c, e, cb) { cb(); } }); break; case 'transform': for (let i = 0; i < n; i++) tmp = new Transform({ transform(c, e, cb) { cb(null, c); }, }); break; case 'pair': for (let i = 0; i < n; i++) tmp = new PassThrough(); break; } bench.end(n); ok(tmp !== undefined); } function benchWebStream(type, n) { let tmp; bench.start(); switch (type) { case 'readable': for (let i = 0; i < n; i++) tmp = new ReadableStream({ pull() {} }); break; case 'writable': for (let i = 0; i < n; i++) tmp = new WritableStream({ write() {} }); break; case 'transform': for (let i = 0; i < n; i++) tmp = new TransformStream({ transform(c, controller) { controller.enqueue(c); }, }); break; case 'pair': { // TransformStream gives a readable+writable pair for (let i = 0; i < n; i++) tmp = new TransformStream(); break; } } bench.end(n); ok(tmp !== undefined); } function benchIter(type, n) { const { push, from, duplex } = require('stream/iter'); let tmp; bench.start(); switch (type) { case 'readable': for (let i = 0; i < n; i++) tmp = from('x'); break; case 'writable': // push() creates a writer+readable pair for (let i = 0; i < n; i++) tmp = push(); break; case 'pair': // duplex() creates a bidirectional channel pair for (let i = 0; i < n; i++) tmp = duplex(); break; } bench.end(n); ok(tmp !== undefined); }