Skip to content

fs: improve error performance of sync methods

This is a work-in-progress pull request. Opened to receive feedback while I navigate through the issues.

It includes some interesting performance improvements. I'll update the following list while I add more functions.

Improvements

  • existsSync
fs/bench-existsSync.js n=1000000 type='existing'                 ***      2.45 %       ±1.36% ±1.81% ±2.36%
fs/bench-existsSync.js n=1000000 type='non-existing'             ***     30.63 %       ±1.49% ±1.99% ±2.59%
fs/bench-existsSync.js n=1000000 type='non-flat-existing'         **      2.57 %       ±1.52% ±2.02% ±2.64%
  • accessSync
fs/bench-accessSync.js n=100000 type='existing'                 ***      3.18 %       ±1.41% ±1.88% ±2.45%
fs/bench-accessSync.js n=100000 type='non-existing'             ***    100.88 %       ±3.34% ±4.48% ±5.90%
fs/bench-accessSync.js n=100000 type='non-flat-existing'        ***      3.29 %       ±1.48% ±1.97% ±2.56%
  • copyFileSync
fs/bench-copyFileSync.js n=10000 type='invalid'        ***     83.57 %       ±1.58% ±2.11% ±2.75%
fs/bench-copyFileSync.js n=10000 type='valid'                  -0.89 %       ±1.90% ±2.53% ±3.30%
  • readFileSync
fs/readFileSync.js n=600 path='existing' encoding='undefined'                    -0.48 %       ±2.03% ±2.70% ±3.51%
fs/readFileSync.js n=600 path='existing' encoding='utf8'                          1.38 %       ±1.62% ±2.16% ±2.82%
fs/readFileSync.js n=600 path='non-existing' encoding='undefined'                 1.40 %       ±1.72% ±2.29% ±3.01%
fs/readFileSync.js n=600 path='non-existing' encoding='utf8'             ***     71.66 %       ±2.50% ±3.35% ±4.40%
  • statSync
fs/bench-statSync-failure.js statSyncType='noThrow' n=1000000        ***     33.13 %       ±0.92% ±1.23% ±1.60%
fs/bench-statSync-failure.js statSyncType='throw' n=1000000          ***     89.53 %       ±0.98% ±1.31% ±1.72%
fs/bench-statSync.js statSyncType='fstatSync' n=1000000                      -0.67 %       ±3.56% ±4.75% ±6.19%
fs/bench-statSync.js statSyncType='lstatSync' n=1000000                       1.22 %       ±2.83% ±3.77% ±4.91%
fs/bench-statSync.js statSyncType='statSync' n=1000000                        0.52 %       ±2.62% ±3.49% ±4.54%
  • openSync
fs/bench-openSync.js n=100000 type='existing'                     0.30 %       ±1.45% ±1.94% ±2.53%
fs/bench-openSync.js n=100000 type='non-existing'        ***     92.76 %       ±4.05% ±5.42% ±7.12%

Fixes https://github.com/nodejs/performance/issues/106

cc @nodejs/performance

Merge request reports

Loading