Skip to content

Conversation

@H4ad
Copy link
Member

@H4adH4ad commented Sep 28, 2023

Reducing the number of comparisons and allocations when using validateObject.

 confidence improvement accuracy (*) (**) (***) validators/validate-object.js objectToTest='array' n=100000 *** 28696.95 % ±1448.43% ±1952.07% ±2591.59% validators/validate-object.js objectToTest='function' n=100000 *** 28553.34 % ±1501.99% ±2024.25% ±2687.42% validators/validate-object.js objectToTest='null' n=100000 *** 25157.86 % ±1483.43% ±1999.24% ±2654.21% validators/validate-object.js objectToTest='object' n=100000 *** 60.87 % ±10.64% ±14.24% ±18.70% Be aware that when doing many comparisons the risk of a false-positive result increases. In this case, there are 4 comparisons, you can thus expect the following amount of false-positive results: 0.20 false positives, when considering a 5% risk acceptance (*, **, ***), 0.04 false positives, when considering a 1% risk acceptance (**, ***), 0.00 false positives, when considering a 0.1% risk acceptance (***) 

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. labels Sep 28, 2023
@aduh95
Copy link
Contributor

aduh95 commented Sep 28, 2023

Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1427/

Results
 confidence improvement accuracy (*) (**) (***) fs/bench-accessSync.js n=100000 type='existing' 1.41 % ±5.64% ±7.50% ±9.77% fs/bench-accessSync.js n=100000 type='non-existing' 1.23 % ±2.13% ±2.83% ±3.68% fs/bench-accessSync.js n=100000 type='non-flat-existing' 2.53 % ±6.43% ±8.56% ±11.14% fs/bench-copyFileSync.js n=10000 type='invalid' -6.73 % ±9.69% ±12.90% ±16.79% fs/bench-copyFileSync.js n=10000 type='valid' -1.04 % ±3.95% ±5.27% ±6.87% fs/bench-existsSync.js n=1000000 type='existing' 0.53 % ±0.98% ±1.30% ±1.69% fs/bench-existsSync.js n=1000000 type='non-existing' -0.05 % ±1.13% ±1.50% ±1.95% fs/bench-existsSync.js n=1000000 type='non-flat-existing' ** 1.53 % ±1.11% ±1.48% ±1.92% fs/bench-mkdirp.js n=10000 0.48 % ±3.02% ±4.01% ±5.22% fs/bench-opendir.js bufferSize=1024 mode='async' dir='lib' n=100 1.38 % ±4.32% ±5.76% ±7.50% fs/bench-opendir.js bufferSize=1024 mode='async' dir='test/parallel' n=100 0.71 % ±3.02% ±4.02% ±5.24% fs/bench-opendir.js bufferSize=1024 mode='callback' dir='lib' n=100 -0.11 % ±3.27% ±4.36% ±5.67% fs/bench-opendir.js bufferSize=1024 mode='callback' dir='test/parallel' n=100 -0.19 % ±1.59% ±2.12% ±2.76% fs/bench-opendir.js bufferSize=1024 mode='sync' dir='lib' n=100 -0.46 % ±3.95% ±5.25% ±6.83% fs/bench-opendir.js bufferSize=1024 mode='sync' dir='test/parallel' n=100 3.72 % ±5.63% ±7.49% ±9.75% fs/bench-opendir.js bufferSize=32 mode='async' dir='lib' n=100 2.83 % ±3.55% ±4.73% ±6.17% fs/bench-opendir.js bufferSize=32 mode='async' dir='test/parallel' n=100 2.43 % ±6.19% ±8.24% ±10.74% fs/bench-opendir.js bufferSize=32 mode='callback' dir='lib' n=100 1.84 % ±2.31% ±3.08% ±4.01% fs/bench-opendir.js bufferSize=32 mode='callback' dir='test/parallel' n=100 -7.28 % ±8.81% ±11.72% ±15.26% fs/bench-opendir.js bufferSize=32 mode='sync' dir='lib' n=100 -3.85 % ±5.03% ±6.70% ±8.76% fs/bench-opendir.js bufferSize=32 mode='sync' dir='test/parallel' n=100 1.93 % ±6.92% ±9.21% ±11.99% fs/bench-opendir.js bufferSize=4 mode='async' dir='lib' n=100 -0.21 % ±1.50% ±1.99% ±2.60% fs/bench-opendir.js bufferSize=4 mode='async' dir='test/parallel' n=100 0.65 % ±1.69% ±2.25% ±2.92% fs/bench-opendir.js bufferSize=4 mode='callback' dir='lib' n=100 -0.32 % ±2.36% ±3.14% ±4.09% fs/bench-opendir.js bufferSize=4 mode='callback' dir='test/parallel' n=100 -1.03 % ±2.36% ±3.14% ±4.10% fs/bench-opendir.js bufferSize=4 mode='sync' dir='lib' n=100 0.43 % ±5.83% ±7.77% ±10.12% fs/bench-opendir.js bufferSize=4 mode='sync' dir='test/parallel' n=100 5.71 % ±6.53% ±8.70% ±11.32% fs/bench-opendirSync.js n=1000 type='existing' * 3.12 % ±2.83% ±3.77% ±4.91% fs/bench-opendirSync.js n=1000 type='non-existing' 1.57 % ±7.79% ±10.36% ±13.48% fs/bench-openSync.js n=100000 type='existing' * 4.18 % ±4.02% ±5.35% ±6.96% fs/bench-openSync.js n=100000 type='non-existing' -1.78 % ±2.58% ±3.44% ±4.50% fs/bench-readdir.js withFileTypes='false' dir='lib' n=10 * -4.27 % ±3.24% ±4.31% ±5.61% fs/bench-readdir.js withFileTypes='false' dir='test/parallel' n=10 0.16 % ±0.97% ±1.28% ±1.67% fs/bench-readdir.js withFileTypes='true' dir='lib' n=10 3.61 % ±4.04% ±5.38% ±7.01% fs/bench-readdir.js withFileTypes='true' dir='test/parallel' n=10 -0.03 % ±0.89% ±1.18% ±1.54% fs/bench-readdirSync.js withFileTypes='false' dir='lib' n=10 6.22 % ±9.63% ±12.83% ±16.74% fs/bench-readdirSync.js withFileTypes='false' dir='test/parallel' n=10 0.29 % ±1.10% ±1.46% ±1.90% fs/bench-readdirSync.js withFileTypes='true' dir='lib' n=10 0.51 % ±10.06% ±13.39% ±17.43% fs/bench-readdirSync.js withFileTypes='true' dir='test/parallel' n=10 -0.06 % ±1.31% ±1.75% ±2.28% fs/bench-realpath.js pathType='relative' n=10000 -0.69 % ±4.78% ±6.36% ±8.27% fs/bench-realpath.js pathType='resolved' n=10000 1.15 % ±2.59% ±3.45% ±4.49% fs/bench-realpathSync.js pathType='relative' n=10000 -0.76 % ±2.23% ±2.98% ±3.88% fs/bench-realpathSync.js pathType='resolved' n=10000 3.78 % ±5.82% ±7.80% ±10.28% fs/bench-stat-promise.js statType='fstat' n=200000 1.08 % ±1.95% ±2.59% ±3.38% fs/bench-stat-promise.js statType='lstat' n=200000 0.52 % ±2.04% ±2.71% ±3.53% fs/bench-stat-promise.js statType='stat' n=200000 0.13 % ±2.01% ±2.68% ±3.49% fs/bench-stat.js statType='fstat' n=200000 ** 3.06 % ±1.84% ±2.45% ±3.20% fs/bench-stat.js statType='lstat' n=200000 0.55 % ±1.83% ±2.43% ±3.17% fs/bench-stat.js statType='stat' n=200000 2.10 % ±2.18% ±2.90% ±3.78% fs/bench-statSync-failure.js statSyncType='noThrow' n=1000000 -0.75 % ±1.30% ±1.73% ±2.25% fs/bench-statSync-failure.js statSyncType='throw' n=1000000 * 1.92 % ±1.66% ±2.22% ±2.89% fs/bench-statSync.js statSyncType='fstatSync' n=1000000 0.30 % ±0.92% ±1.22% ±1.60% fs/bench-statSync.js statSyncType='lstatSync' n=1000000 0.08 % ±0.82% ±1.09% ±1.42% fs/bench-statSync.js statSyncType='statSync' n=1000000 1.45 % ±1.66% ±2.21% ±2.89% fs/bench-unlinkSync.js n=1000 type='existing' -2.26 % ±5.01% ±6.67% ±8.69% fs/bench-unlinkSync.js n=1000 type='non-existing' 0.30 % ±4.42% ±5.89% ±7.67% fs/read-stream-throughput.js n=1024 highWaterMark=1024 filesize=1024000 encodingType='asc' 0.04 % ±2.41% ±3.21% ±4.18% fs/read-stream-throughput.js n=1024 highWaterMark=1024 filesize=1024000 encodingType='buf' -3.11 % ±3.33% ±4.45% ±5.82% fs/read-stream-throughput.js n=1024 highWaterMark=1024 filesize=1024000 encodingType='utf' -0.41 % ±1.42% ±1.89% ±2.47% fs/read-stream-throughput.js n=1024 highWaterMark=1048576 filesize=1024000 encodingType='asc' -0.41 % ±1.90% ±2.53% ±3.30% fs/read-stream-throughput.js n=1024 highWaterMark=1048576 filesize=1024000 encodingType='buf' 0.77 % ±2.76% ±3.67% ±4.78% fs/read-stream-throughput.js n=1024 highWaterMark=1048576 filesize=1024000 encodingType='utf' 0.08 % ±0.83% ±1.11% ±1.44% fs/read-stream-throughput.js n=1024 highWaterMark=4096 filesize=1024000 encodingType='asc' * 1.73 % ±1.55% ±2.07% ±2.70% fs/read-stream-throughput.js n=1024 highWaterMark=4096 filesize=1024000 encodingType='buf' 1.21 % ±2.14% ±2.84% ±3.70% fs/read-stream-throughput.js n=1024 highWaterMark=4096 filesize=1024000 encodingType='utf' 1.09 % ±1.51% ±2.03% ±2.67% fs/read-stream-throughput.js n=1024 highWaterMark=65535 filesize=1024000 encodingType='asc' -1.10 % ±3.02% ±4.03% ±5.25% fs/read-stream-throughput.js n=1024 highWaterMark=65535 filesize=1024000 encodingType='buf' * -3.81 % ±3.10% ±4.12% ±5.36% fs/read-stream-throughput.js n=1024 highWaterMark=65535 filesize=1024000 encodingType='utf' -0.47 % ±0.64% ±0.85% ±1.11% fs/readfile-partitioned.js concurrent=1 len=1024 encoding='' duration=5 -1.27 % ±1.36% ±1.82% ±2.37% fs/readfile-partitioned.js concurrent=1 len=1024 encoding='utf-8' duration=5 -0.56 % ±1.15% ±1.53% ±2.00% fs/readfile-partitioned.js concurrent=1 len=16777216 encoding='' duration=5 0.35 % ±1.73% ±2.30% ±3.00% fs/readfile-partitioned.js concurrent=1 len=16777216 encoding='utf-8' duration=5 2.98 % ±5.06% ±6.76% ±8.84% fs/readfile-partitioned.js concurrent=10 len=1024 encoding='' duration=5 * -1.81 % ±1.53% ±2.03% ±2.64% fs/readfile-partitioned.js concurrent=10 len=1024 encoding='utf-8' duration=5 ** -2.57 % ±1.79% ±2.39% ±3.11% fs/readfile-partitioned.js concurrent=10 len=16777216 encoding='' duration=5 1.47 % ±2.35% ±3.12% ±4.07% fs/readfile-partitioned.js concurrent=10 len=16777216 encoding='utf-8' duration=5 0.66 % ±3.66% ±4.88% ±6.35% fs/readfile-permission-enabled.js concurrent=1 len=1024 encoding='' duration=5 -1.61 % ±1.67% ±2.22% ±2.89% fs/readfile-permission-enabled.js concurrent=1 len=1024 encoding='utf-8' duration=5 -0.86 % ±1.45% ±1.93% ±2.51% fs/readfile-permission-enabled.js concurrent=1 len=16777216 encoding='' duration=5 0.22 % ±5.10% ±6.79% ±8.84% fs/readfile-permission-enabled.js concurrent=1 len=16777216 encoding='utf-8' duration=5 -0.28 % ±1.73% ±2.33% ±3.08% fs/readfile-permission-enabled.js concurrent=10 len=1024 encoding='' duration=5 -0.49 % ±1.86% ±2.48% ±3.23% fs/readfile-permission-enabled.js concurrent=10 len=1024 encoding='utf-8' duration=5 ** -2.54 % ±1.89% ±2.52% ±3.30% fs/readfile-permission-enabled.js concurrent=10 len=16777216 encoding='' duration=5 -2.96 % ±4.69% ±6.24% ±8.12% fs/readfile-permission-enabled.js concurrent=10 len=16777216 encoding='utf-8' duration=5 -1.07 % ±1.78% ±2.36% ±3.08% fs/readfile-promises.js concurrent=1 len=1024 encoding='' duration=5 1.22 % ±2.26% ±3.01% ±3.92% fs/readfile-promises.js concurrent=1 len=1024 encoding='utf-8' duration=5 0.57 % ±2.33% ±3.10% ±4.04% fs/readfile-promises.js concurrent=1 len=16777216 encoding='' duration=5 -0.83 % ±1.07% ±1.43% ±1.86% fs/readfile-promises.js concurrent=1 len=16777216 encoding='utf-8' duration=5 -0.23 % ±0.91% ±1.22% ±1.58% fs/readfile-promises.js concurrent=1 len=33554432 encoding='' duration=5 0.64 % ±0.98% ±1.30% ±1.69% fs/readfile-promises.js concurrent=1 len=33554432 encoding='utf-8' duration=5 -0.08 % ±0.71% ±0.94% ±1.22% fs/readfile-promises.js concurrent=1 len=4194304 encoding='' duration=5 0.70 % ±1.27% ±1.69% ±2.20% fs/readfile-promises.js concurrent=1 len=4194304 encoding='utf-8' duration=5 -1.03 % ±1.96% ±2.64% ±3.49% fs/readfile-promises.js concurrent=1 len=524288 encoding='' duration=5 1.30 % ±3.15% ±4.19% ±5.46% fs/readfile-promises.js concurrent=1 len=524288 encoding='utf-8' duration=5 -0.57 % ±1.81% ±2.40% ±3.13% fs/readfile-promises.js concurrent=1 len=8388608 encoding='' duration=5 -0.07 % ±1.23% ±1.64% ±2.14% fs/readfile-promises.js concurrent=1 len=8388608 encoding='utf-8' duration=5 -0.36 % ±0.79% ±1.05% ±1.36% fs/readfile-promises.js concurrent=10 len=1024 encoding='' duration=5 * -1.55 % ±1.23% ±1.64% ±2.14% fs/readfile-promises.js concurrent=10 len=1024 encoding='utf-8' duration=5 0.28 % ±1.58% ±2.10% ±2.73% fs/readfile-promises.js concurrent=10 len=16777216 encoding='' duration=5 1.01 % ±1.88% ±2.50% ±3.25% fs/readfile-promises.js concurrent=10 len=16777216 encoding='utf-8' duration=5 -0.08 % ±1.05% ±1.39% ±1.82% fs/readfile-promises.js concurrent=10 len=33554432 encoding='' duration=5 -0.24 % ±1.11% ±1.47% ±1.92% fs/readfile-promises.js concurrent=10 len=33554432 encoding='utf-8' duration=5 -0.09 % ±0.87% ±1.17% ±1.54% fs/readfile-promises.js concurrent=10 len=4194304 encoding='' duration=5 -0.68 % ±2.59% ±3.45% ±4.50% fs/readfile-promises.js concurrent=10 len=4194304 encoding='utf-8' duration=5 -0.20 % ±1.42% ±1.88% ±2.45% fs/readfile-promises.js concurrent=10 len=524288 encoding='' duration=5 -0.35 % ±3.06% ±4.07% ±5.30% fs/readfile-promises.js concurrent=10 len=524288 encoding='utf-8' duration=5 -0.04 % ±1.00% ±1.33% ±1.73% fs/readfile-promises.js concurrent=10 len=8388608 encoding='' duration=5 0.72 % ±1.62% ±2.15% ±2.81% fs/readfile-promises.js concurrent=10 len=8388608 encoding='utf-8' duration=5 * 1.52 % ±1.40% ±1.86% ±2.42% fs/readfile.js concurrent=1 len=1024 encoding='' duration=5 0.44 % ±1.31% ±1.74% ±2.26% fs/readfile.js concurrent=1 len=1024 encoding='utf-8' duration=5 -0.11 % ±1.23% ±1.64% ±2.13% fs/readfile.js concurrent=1 len=16777216 encoding='' duration=5 2.60 % ±4.37% ±5.82% ±7.58% fs/readfile.js concurrent=1 len=16777216 encoding='utf-8' duration=5 -0.40 % ±0.79% ±1.06% ±1.37% fs/readfile.js concurrent=10 len=1024 encoding='' duration=5 0.54 % ±1.32% ±1.75% ±2.28% fs/readfile.js concurrent=10 len=1024 encoding='utf-8' duration=5 0.13 % ±1.42% ±1.89% ±2.46% fs/readfile.js concurrent=10 len=16777216 encoding='' duration=5 0.09 % ±5.44% ±7.24% ±9.44% fs/readfile.js concurrent=10 len=16777216 encoding='utf-8' duration=5 0.24 % ±1.60% ±2.13% ±2.77% fs/readFileSync.js n=10000 hasFileDescriptor='false' path='existing' encoding='undefined' 5.77 % ±8.20% ±10.92% ±14.23% fs/readFileSync.js n=10000 hasFileDescriptor='false' path='existing' encoding='utf8' 0.62 % ±10.08% ±13.42% ±17.48% fs/readFileSync.js n=10000 hasFileDescriptor='false' path='non-existing' encoding='undefined' 1.76 % ±10.11% ±13.45% ±17.50% fs/readFileSync.js n=10000 hasFileDescriptor='false' path='non-existing' encoding='utf8' 1.31 % ±8.19% ±10.90% ±14.18% fs/readFileSync.js n=10000 hasFileDescriptor='true' path='existing' encoding='undefined' -4.90 % ±7.52% ±10.01% ±13.03% fs/readFileSync.js n=10000 hasFileDescriptor='true' path='existing' encoding='utf8' -3.61 % ±9.38% ±12.48% ±16.24% fs/readFileSync.js n=10000 hasFileDescriptor='true' path='non-existing' encoding='undefined' -0.21 % ±7.49% ±9.96% ±12.96% fs/readFileSync.js n=10000 hasFileDescriptor='true' path='non-existing' encoding='utf8' 5.21 % ±9.34% ±12.43% ±16.17% fs/write-stream-throughput.js size=1024 encodingType='asc' dur=5 -0.47 % ±1.68% ±2.24% ±2.92% fs/write-stream-throughput.js size=1024 encodingType='buf' dur=5 * -1.90 % ±1.48% ±1.97% ±2.56% fs/write-stream-throughput.js size=1024 encodingType='utf' dur=5 1.26 % ±1.39% ±1.86% ±2.42% fs/write-stream-throughput.js size=1048576 encodingType='asc' dur=5 -1.59 % ±1.77% ±2.36% ±3.07% fs/write-stream-throughput.js size=1048576 encodingType='buf' dur=5 -0.32 % ±0.81% ±1.08% ±1.41% fs/write-stream-throughput.js size=1048576 encodingType='utf' dur=5 -0.81 % ±1.69% ±2.25% ±2.94% fs/write-stream-throughput.js size=2 encodingType='asc' dur=5 0.29 % ±2.16% ±2.87% ±3.74% fs/write-stream-throughput.js size=2 encodingType='buf' dur=5 *** 3.15 % ±1.68% ±2.23% ±2.90% fs/write-stream-throughput.js size=2 encodingType='utf' dur=5 0.63 % ±3.35% ±4.46% ±5.81% fs/write-stream-throughput.js size=65535 encodingType='asc' dur=5 -0.56 % ±1.16% ±1.54% ±2.02% fs/write-stream-throughput.js size=65535 encodingType='buf' dur=5 -0.12 % ±0.99% ±1.32% ±1.72% fs/write-stream-throughput.js size=65535 encodingType='utf' dur=5 -1.01 % ±1.19% ±1.59% ±2.09% fs/writefile-promises.js concurrent=1 size=1024 encodingType='asc' duration=5 1.36 % ±2.99% ±3.98% ±5.19% fs/writefile-promises.js concurrent=1 size=1024 encodingType='buf' duration=5 -0.01 % ±2.98% ±3.97% ±5.19% fs/writefile-promises.js concurrent=1 size=1024 encodingType='utf' duration=5 0.39 % ±3.03% ±4.03% ±5.25% fs/writefile-promises.js concurrent=1 size=1048576 encodingType='asc' duration=5 -0.63 % ±1.67% ±2.23% ±2.91% fs/writefile-promises.js concurrent=1 size=1048576 encodingType='buf' duration=5 0.32 % ±1.02% ±1.37% ±1.78% fs/writefile-promises.js concurrent=1 size=1048576 encodingType='utf' duration=5 0.07 % ±2.44% ±3.26% ±4.26% fs/writefile-promises.js concurrent=1 size=2 encodingType='asc' duration=5 ** 4.20 % ±2.93% ±3.90% ±5.08% fs/writefile-promises.js concurrent=1 size=2 encodingType='buf' duration=5 1.18 % ±2.63% ±3.50% ±4.56% fs/writefile-promises.js concurrent=1 size=2 encodingType='utf' duration=5 -0.87 % ±3.10% ±4.12% ±5.37% fs/writefile-promises.js concurrent=1 size=65535 encodingType='asc' duration=5 -0.20 % ±3.57% ±4.75% ±6.18% fs/writefile-promises.js concurrent=1 size=65535 encodingType='buf' duration=5 -0.98 % ±3.11% ±4.14% ±5.40% fs/writefile-promises.js concurrent=1 size=65535 encodingType='utf' duration=5 -0.84 % ±2.64% ±3.51% ±4.57% fs/writefile-promises.js concurrent=10 size=1024 encodingType='asc' duration=5 -0.57 % ±1.59% ±2.11% ±2.75% fs/writefile-promises.js concurrent=10 size=1024 encodingType='buf' duration=5 -0.11 % ±1.44% ±1.92% ±2.50% fs/writefile-promises.js concurrent=10 size=1024 encodingType='utf' duration=5 -1.06 % ±2.62% ±3.48% ±4.54% fs/writefile-promises.js concurrent=10 size=1048576 encodingType='asc' duration=5 -0.06 % ±1.18% ±1.57% ±2.05% fs/writefile-promises.js concurrent=10 size=1048576 encodingType='buf' duration=5 0.76 % ±1.39% ±1.84% ±2.40% fs/writefile-promises.js concurrent=10 size=1048576 encodingType='utf' duration=5 -0.09 % ±1.34% ±1.78% ±2.32% fs/writefile-promises.js concurrent=10 size=2 encodingType='asc' duration=5 1.08 % ±1.53% ±2.04% ±2.66% fs/writefile-promises.js concurrent=10 size=2 encodingType='buf' duration=5 0.66 % ±1.78% ±2.36% ±3.08% fs/writefile-promises.js concurrent=10 size=2 encodingType='utf' duration=5 0.97 % ±2.07% ±2.76% ±3.59% fs/writefile-promises.js concurrent=10 size=65535 encodingType='asc' duration=5 -0.74 % ±2.17% ±2.89% ±3.77% fs/writefile-promises.js concurrent=10 size=65535 encodingType='buf' duration=5 0.32 % ±0.82% ±1.10% ±1.43% fs/writefile-promises.js concurrent=10 size=65535 encodingType='utf' duration=5 * -1.84 % ±1.42% ±1.89% ±2.47% streams/creation.js kind='duplex' n=50000000 -0.86 % ±1.27% ±1.69% ±2.20% streams/creation.js kind='readable' n=50000000 1.42 % ±3.96% ±5.30% ±6.95% streams/creation.js kind='transform' n=50000000 -0.57 % ±2.55% ±3.42% ±4.51% streams/creation.js kind='writable' n=50000000 0.39 % ±1.33% ±1.78% ±2.31% streams/destroy.js kind='duplex' n=1000000 * 6.26 % ±4.86% ±6.47% ±8.43% streams/destroy.js kind='readable' n=1000000 -1.13 % ±3.41% ±4.54% ±5.91% streams/destroy.js kind='transform' n=1000000 -3.60 % ±5.73% ±7.63% ±9.94% streams/destroy.js kind='writable' n=1000000 -0.48 % ±3.32% ±4.41% ±5.75% streams/pipe-object-mode.js n=5000000 -0.49 % ±3.84% ±5.11% ±6.64% streams/pipe.js n=5000000 1.53 % ±2.45% ±3.27% ±4.26% streams/readable-async-iterator.js sync='no' n=100000 -3.63 % ±5.09% ±6.78% ±8.85% streams/readable-async-iterator.js sync='yes' n=100000 -2.28 % ±5.47% ±7.29% ±9.50% streams/readable-bigread.js n=1000 -0.42 % ±1.78% ±2.37% ±3.09% streams/readable-bigunevenread.js n=1000 0.91 % ±6.13% ±8.16% ±10.62% streams/readable-boundaryread.js type='buffer' n=2000 1.28 % ±2.03% ±2.70% ±3.52% streams/readable-boundaryread.js type='string' n=2000 0.31 % ±0.61% ±0.81% ±1.05% streams/readable-from.js n=10000000 1.26 % ±2.01% ±2.68% ±3.48% streams/readable-readall.js n=5000 0.38 % ±0.67% ±0.89% ±1.16% streams/readable-unevenread.js n=1000 -0.12 % ±0.52% ±0.69% ±0.90% streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='no' n=2000000 -0.11 % ±2.74% ±3.65% ±4.75% streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='yes' n=2000000 -1.32 % ±9.81% ±13.05% ±16.98% streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='no' n=2000000 1.86 % ±7.78% ±10.35% ±13.48% streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='yes' n=2000000 -0.45 % ±8.91% ±11.86% ±15.43% streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='no' n=2000000 1.64 % ±3.61% ±4.80% ±6.24% streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='yes' n=2000000 1.94 % ±9.83% ±13.08% ±17.03% streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='no' n=2000000 -4.87 % ±6.94% ±9.24% ±12.04% streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='yes' n=2000000 2.62 % ±8.84% ±11.77% ±15.32% streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='no' n=2000000 0.65 % ±3.25% ±4.33% ±5.64% streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='yes' n=2000000 -1.31 % ±3.00% ±3.99% ±5.20% streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='no' n=2000000 -0.06 % ±3.17% ±4.21% ±5.49% streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='yes' n=2000000 -1.07 % ±3.14% ±4.18% ±5.44% streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='no' n=2000000 -1.98 % ±3.26% ±4.34% ±5.65% streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='yes' n=2000000 -0.21 % ±3.47% ±4.62% ±6.01% streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='no' n=2000000 0.70 % ±3.32% ±4.42% ±5.76% streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='yes' n=2000000 1.93 % ±3.99% ±5.31% ±6.91% validators/validate-object.js objectToTest='array' n=100000 *** 13318.50 % ±491.20% ±662.00% ±878.88% validators/validate-object.js objectToTest='function' n=100000 *** 14430.45 % ±528.01% ±711.61% ±944.74% validators/validate-object.js objectToTest='null' n=100000 *** 12547.62 % ±433.24% ±583.89% ±775.17% validators/validate-object.js objectToTest='object' n=100000 *** 58.94 % ±5.68% ±7.62% ±10.03% 

Copy link
Member

@anonriganonrig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@anonriganonrig added author ready PRs that have at least one approval, no pending requests for changes, and a CI started. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 28, 2023
@github-actionsgithub-actionsbot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 28, 2023
@nodejs-github-bot
Copy link
Collaborator

Copy link
Member

@benjamingrbenjamingr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it wouldn't be better to just split it into 2 functions (one for default other with options) and if that would let us avoid the bit sorcery and still see the performance improvement.

@H4ad
Copy link
MemberAuthor

H4ad commented Sep 28, 2023

@benjamingr Maybe, the bit sorcery still needed to not have a bunch of duplicated functions (one for each combination).

I can introduce internal functions but I don't think that will be worth adding one more hideStackFrames if I throw an exception.
It could be two functions, maybe validateObject and validateObjectWithOptions but this didn't look good to me, so I will keep it as is for now unless you have some suggestions.

Copy link
Contributor

@aduh95aduh95 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to #49928 (comment), this has little effect on the overall performance of Node.js. Still a good change to see.

@nodejs-github-bot
Copy link
Collaborator

@anonriganonrig added the performance Issues and PRs related to the performance of Node.js. label Sep 29, 2023
@nodejs-github-bot
Copy link
Collaborator

@anonriganonrig added the request-ci Add this label to start a Jenkins CI on a PR. label Sep 30, 2023
@github-actionsgithub-actionsbot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 30, 2023
@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@anonriganonrig added the commit-queue Add this label to land a pull request using GitHub Actions. label Oct 2, 2023
@nodejs-github-botnodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Oct 2, 2023
@nodejs-github-botnodejs-github-bot merged commit 952cf0d into nodejs:mainOct 2, 2023
@nodejs-github-bot
Copy link
Collaborator

Landed in 952cf0d

@H4adH4ad deleted the perf/validate-objects branch October 2, 2023 12:57
alexfernandez pushed a commit to alexfernandez/node that referenced this pull request Nov 1, 2023
PR-URL: nodejs#49928 Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
targos pushed a commit that referenced this pull request Nov 11, 2023
PR-URL: #49928 Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
@targostargos mentioned this pull request Nov 12, 2023
debadree25 pushed a commit to debadree25/node that referenced this pull request Apr 15, 2024
PR-URL: nodejs#49928 Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs that have at least one approval, no pending requests for changes, and a CI started.lib / srcIssues and PRs related to general changes in the lib or src directory.needs-ciPRs that need a full CI run.performanceIssues and PRs related to the performance of Node.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@H4ad@aduh95@nodejs-github-bot@benjamingr@anonrig