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