Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitzan Uziely <linkgoron@gmail.com>2021-03-05 22:19:53 +0300
committerAntoine du Hamel <duhamelantoine1995@gmail.com>2021-03-13 15:41:00 +0300
commita97f01ea8cb3b421dfe70c0271b9b37e549b8b0b (patch)
tree017f9d7071d7a2835e2aa6f40ff30b3b3d2d19c2 /benchmark
parente1ce7f1194ce81188e080fca0ec6fb80db842c5d (diff)
benchmark: add benchmark for fsPromises.writeFile
added fs.promises.writeFile benchmark PR-URL: https://github.com/nodejs/node/pull/37610 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/fs/writefile-promises.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/benchmark/fs/writefile-promises.js b/benchmark/fs/writefile-promises.js
new file mode 100644
index 00000000000..2ba25184ff3
--- /dev/null
+++ b/benchmark/fs/writefile-promises.js
@@ -0,0 +1,76 @@
+// Call fs.promises.writeFile over and over again really fast.
+// Then see how many times it got called.
+// Yes, this is a silly benchmark. Most benchmarks are silly.
+'use strict';
+
+const path = require('path');
+const common = require('../common.js');
+const fs = require('fs');
+const assert = require('assert');
+const tmpdir = require('../../test/common/tmpdir');
+
+tmpdir.refresh();
+const filename = path.resolve(tmpdir.path,
+ `.removeme-benchmark-garbage-${process.pid}`);
+let filesWritten = 0;
+const bench = common.createBenchmark(main, {
+ duration: [5],
+ encodingType: ['buf', 'asc', 'utf'],
+ size: [2, 1024, 65535, 1024 * 1024],
+ concurrent: [1, 10]
+});
+
+function main({ encodingType, duration, concurrent, size }) {
+ let encoding;
+ let chunk;
+ switch (encodingType) {
+ case 'buf':
+ chunk = Buffer.alloc(size, 'b');
+ break;
+ case 'asc':
+ chunk = 'a'.repeat(size);
+ encoding = 'ascii';
+ break;
+ case 'utf':
+ chunk = 'ΓΌ'.repeat(Math.ceil(size / 2));
+ encoding = 'utf8';
+ break;
+ default:
+ throw new Error(`invalid encodingType: ${encodingType}`);
+ }
+
+ let writes = 0;
+ let benchEnded = false;
+ bench.start();
+ setTimeout(() => {
+ benchEnded = true;
+ bench.end(writes);
+ for (let i = 0; i < filesWritten; i++) {
+ try { fs.unlinkSync(`${filename}-${i}`); } catch { }
+ }
+ process.exit(0);
+ }, duration * 1000);
+
+ function write() {
+ fs.promises.writeFile(`${filename}-${filesWritten++}`, chunk, encoding)
+ .then(() => afterWrite())
+ .catch((err) => afterWrite(err));
+ }
+
+ function afterWrite(er) {
+ if (er) {
+ if (er.code === 'ENOENT') {
+ // Only OK if unlinked by the timer from main.
+ assert.ok(benchEnded);
+ return;
+ }
+ throw er;
+ }
+
+ writes++;
+ if (!benchEnded)
+ write();
+ }
+
+ while (concurrent--) write();
+}