54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
n: [100],
|
|
dir: [ 'lib', 'test/parallel'],
|
|
mode: [ 'async', 'sync', 'callback' ],
|
|
bufferSize: [ 4, 32, 1024 ]
|
|
});
|
|
|
|
async function main({ n, dir, mode, bufferSize }) {
|
|
const fullPath = path.resolve(__dirname, '../../', dir);
|
|
|
|
bench.start();
|
|
|
|
let counter = 0;
|
|
for (let i = 0; i < n; i++) {
|
|
if (mode === 'async') {
|
|
const dir = await fs.promises.opendir(fullPath, { bufferSize });
|
|
// eslint-disable-next-line no-unused-vars
|
|
for await (const entry of dir)
|
|
counter++;
|
|
} else if (mode === 'callback') {
|
|
const dir = await fs.promises.opendir(fullPath, { bufferSize });
|
|
await new Promise((resolve, reject) => {
|
|
function read() {
|
|
dir.read((err, entry) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else if (entry === null) {
|
|
resolve(dir.close());
|
|
} else {
|
|
counter++;
|
|
read();
|
|
}
|
|
});
|
|
}
|
|
|
|
read();
|
|
});
|
|
} else {
|
|
const dir = fs.opendirSync(fullPath, { bufferSize });
|
|
while (dir.readSync() !== null)
|
|
counter++;
|
|
dir.closeSync();
|
|
}
|
|
}
|
|
|
|
bench.end(counter);
|
|
}
|