From d0520a66cd2e825b23efef43611f4687457ce504 Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Sun, 26 Nov 2023 22:37:12 +0500 Subject: [PATCH] chore: add fs.readdir to benchmarks --- BENCHMARKS.md | 67 +++++++++++++++++++++-------------------- benchmarks/benchmark.js | 54 +++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 55 deletions(-) diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 5c9bb01..5973db6 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -1,50 +1,53 @@ # Benchmarks **System information:** - ``` -Package version: 6.0.0 +Package version: 6.1.1 CPU: Intel Coreā„¢ i7-10610U 1.8GHz Cores: 8 (4 Physical) RAM: 24GB Disk: Samsung SAMSUNG MZVLW256HEHP-000L7 238GB SSD (NVMe) OS: Microsoft Windows 11 Pro (Windows) Kernel: 10.0.22621 x64 -Node: v18.14.0 -V8: 10.2.154.23-node.22 +Node: v20.10.0 +V8: 11.3.244.8-node.25 ``` ## Asynchronous -> 9690 files & 1243 directories +> 4865 files & 745 directories + +| Package | ops/s | Error margin | % slower | +|---------------------|-------|----------|-----------------| +| fdir (v6.1.1) | 76.1 | 1.38 | 2.81 | +| fdir (v3.4.2) | 78.3 | 1.04 | 0 | +| fdir (v4.1.0) | 77.8 | 1.13 | 0.64 | +| fdir (v5.0.0) | 78.1 | 0.98 | 0.26 | +| recursive-fs | 69.3 | 1.04 | 11.49 | +| recur-readdir | 1.7 | 1.5 | 97.83 | +| recursive-files | 15.3 | 4.22 | 80.46 | +| recursive-readdir | 14.9 | 2.72 | 80.97 | +| getAllFiles | 68 | 0.96 | 13.15 | +| node:fs.readdir | 13.1 | 1.43 | 83.27 | -| Package | ops/s | Error margin | % slower | -| ----------------- | ----- | ------------ | -------- | -| fdir (v6.0.0) | 46.9 | 2.87 | 1.47 | -| fdir (v3.4.2) | 47.6 | 2.13 | 0 | -| fdir (v4.1.0) | 41.2 | 6.99 | 13.45 | -| fdir (v5.0.0) | 44.6 | 3.16 | 6.3 | -| recursive-fs | 44.7 | 0.87 | 6.09 | -| recur-readdir | 0.7 | 12.12 | 98.53 | -| recursive-files | 6.3 | 5.07 | 86.76 | -| recursive-readdir | 7.2 | 7.46 | 84.87 | -| getAllFiles | 43.9 | 1.73 | 7.77 | ## Synchronous -> 9690 files & 1243 directories - -| Package | ops/s | Error margin | % slower | -| -------------------- | ------ | ------------ | -------- | -| fdir (v6.0.0) | 18.342 | 2.41 | 8.52 | -| fdir (v1.2.0) | 19.616 | 2.77 | 2.17 | -| fdir (v2.1.1) | 20.051 | 0.62 | 0 | -| fdir (v3.4.2) | 19.719 | 0.85 | 1.66 | -| fdir (v4.1.0) | 18.869 | 0.67 | 5.89 | -| fdir (v5.0.0) | 19.015 | 0.77 | 5.17 | -| get-all-files | 16.882 | 0.66 | 15.8 | -| all-files-in-tree | 3.093 | 1.37 | 84.57 | -| fs-readdir-recursive | 1.409 | 0.6 | 92.97 | -| klaw-sync | 3.092 | 1.83 | 84.58 | -| recur-readdir | 1.369 | 1.97 | 93.17 | -| walk-sync | 1.63 | 1.34 | 91.87 | +> 4865 files & 745 directories + +| Package | ops/s | Error margin | % slower | +|------------------------|-------|----------|-----------------| +| fdir (v6.1.1) | 32.9 | 1.24 | 0 | +| fdir (v1.2.0) | 32.1 | 0.91 | 2.43 | +| fdir (v2.1.1) | 31.8 | 0.87 | 3.34 | +| fdir (v3.4.2) | 31.5 | 1.28 | 4.26 | +| fdir (v4.1.0) | 29.7 | 0.79 | 9.73 | +| fdir (v5.0.0) | 29.9 | 0.61 | 9.12 | +| get-all-files | 28.9 | 0.57 | 12.16 | +| all-files-in-tree | 5.7 | 0.89 | 82.67 | +| fs-readdir-recursive | 2.7 | 0.88 | 91.79 | +| klaw-sync | 5.8 | 0.93 | 82.37 | +| recur-readdir | 3 | 1.58 | 90.88 | +| walk-sync | 2.9 | 0.91 | 91.19 | +| node:fs.readdirSync | 29.1 | 0.72 | 11.55 | + diff --git a/benchmarks/benchmark.js b/benchmarks/benchmark.js index 2cf0c13..54c8de2 100644 --- a/benchmarks/benchmark.js +++ b/benchmarks/benchmark.js @@ -15,50 +15,55 @@ import recursiveFs from "recursive-fs"; import b from "benny"; import { getAllFilesSync, getAllFiles } from "get-all-files"; import packageJson from "../package.json"; -import { readFileSync, writeFileSync } from "fs"; +import { readFileSync, readdirSync, writeFileSync } from "fs"; import CSV2MD from "csv-to-markdown-table"; import { getSystemInfo } from "./export"; +import { readdir } from "fs/promises"; async function benchmark() { - const counts = new fdir().onlyCounts().crawl("node_modules").sync(); + const DIRECTORY = "node_modules"; + const counts = new fdir().onlyCounts().crawl(DIRECTORY).sync(); await b.suite( `Synchronous (${counts.files} files, ${counts.directories} folders)`, b.add(`fdir (v${packageJson.version})`, () => { - new fdir().crawl("node_modules").sync(); + new fdir().crawl(DIRECTORY).sync(); }), b.add("fdir (v1.2.0)", () => { - fdir1.sync("node_modules"); + fdir1.sync(DIRECTORY); }), b.add("fdir (v2.1.1)", () => { - fdir2.sync("node_modules"); + fdir2.sync(DIRECTORY); }), b.add("fdir (v3.4.2)", () => { - new fdir3().crawl("node_modules").sync("node_modules"); + new fdir3().crawl(DIRECTORY).sync(DIRECTORY); }), b.add(`fdir (v4.1.0)`, () => { - new fdir4().crawl("node_modules").sync(); + new fdir4().crawl(DIRECTORY).sync(); }), b.add(`fdir (v5.0.0)`, () => { - new fdir5().crawl("node_modules").sync(); + new fdir5().crawl(DIRECTORY).sync(); }), b.add(`get-all-files`, () => { - getAllFilesSync("node_modules").toArray(); + getAllFilesSync(DIRECTORY).toArray(); }), b.add("all-files-in-tree", () => { - allFilesInTree.sync("node_modules"); + allFilesInTree.sync(DIRECTORY); }), b.add("fs-readdir-recursive", () => { - fsReadDirRecursive("node_modules"); + fsReadDirRecursive(DIRECTORY); }), b.add("klaw-sync", () => { - klawSync("node_modules", {}); + klawSync(DIRECTORY, {}); }), b.add("recur-readdir", () => { - recurReadDir.crawlSync("node_modules"); + recurReadDir.crawlSync(DIRECTORY); }), b.add("walk-sync", () => { - walkSync("node_modules"); + walkSync(DIRECTORY); + }), + b.add("node:fs.readdirSync", () => { + readdirSync(DIRECTORY, { withFileTypes: true, recursive: true }); }), b.cycle(), b.complete(), @@ -68,31 +73,31 @@ async function benchmark() { await b.suite( `Asynchronous (${counts.files} files, ${counts.directories} folders)`, b.add(`fdir (v${packageJson.version})`, async () => { - await new fdir().crawl("node_modules").withPromise(); + await new fdir().crawl(DIRECTORY).withPromise(); }), b.add(`fdir (v3.4.2)`, async () => { - await new fdir3().crawl("node_modules").withPromise(); + await new fdir3().crawl(DIRECTORY).withPromise(); }), b.add(`fdir (v4.1.0)`, async () => { - await new fdir4().crawl("node_modules").withPromise(); + await new fdir4().crawl(DIRECTORY).withPromise(); }), b.add(`fdir (v5.0.0)`, async () => { - await new fdir5().crawl("node_modules").withPromise(); + await new fdir5().crawl(DIRECTORY).withPromise(); }), b.add("recursive-fs", async () => { await new Promise((resolve) => { - recursiveFs.readdirr("node_modules", () => { + recursiveFs.readdirr(DIRECTORY, () => { resolve(undefined); }); }); }), b.add("recur-readdir", async () => { - await recurReadDir.crawl("node_modules"); + await recurReadDir.crawl(DIRECTORY); }), b.add("recursive-files", async () => { let timeout; await new Promise((resolve) => { - recursiveFiles("node_modules", { hidden: true }, () => { + recursiveFiles(DIRECTORY, { hidden: true }, () => { clearTimeout(timeout); timeout = setTimeout(() => { resolve(undefined); @@ -101,10 +106,13 @@ async function benchmark() { }); }), b.add("recursive-readdir", async () => { - await recursiveReadDir("node_modules"); + await recursiveReadDir(DIRECTORY); }), b.add("getAllFiles", async () => { - await getAllFiles("node_modules").toArray(); + await getAllFiles(DIRECTORY).toArray(); + }), + b.add("node:fs.readdir", async () => { + await readdir(DIRECTORY, { withFileTypes: true, recursive: true }); }), b.cycle(), b.complete(),