Skip to content

try to improve stream perf

This is just a poc to see how much of improvement we can get if we don't have generic EventEmitter (this is done by implementing for each event in Readable + Writable a custom emit and on, off, once and more functions

this will break a lot of things...

Streams benchmark URL

00:25:05.593 ++ Rscript benchmark/compare.R
00:25:05.961                                                                                          confidence improvement accuracy (*)   (**)  (***)
00:25:05.961 streams/creation.js kind='duplex' n=50000000                                                    ***     -7.76 %       ±0.82% ±1.09% ±1.43%
00:25:05.961 streams/creation.js kind='readable' n=50000000                                                  ***      2.98 %       ±0.56% ±0.74% ±0.97%
00:25:05.961 streams/creation.js kind='transform' n=50000000                                                 ***     14.07 %       ±1.37% ±1.84% ±2.43%
00:25:05.961 streams/creation.js kind='writable' n=50000000                                                  ***      2.27 %       ±0.69% ±0.92% ±1.20%
00:25:05.961 streams/destroy.js kind='duplex' n=1000000                                                      ***     -1.37 %       ±0.45% ±0.60% ±0.78%
00:25:05.961 streams/destroy.js kind='readable' n=1000000                                                    ***      6.01 %       ±3.03% ±4.08% ±5.40%
00:25:05.961 streams/destroy.js kind='transform' n=1000000                                                     *     -0.47 %       ±0.45% ±0.59% ±0.77%
00:25:05.961 streams/destroy.js kind='writable' n=1000000                                                             0.11 %       ±0.61% ±0.81% ±1.06%
00:25:05.961 streams/pipe-object-mode.js n=5000000                                                           ***    -25.59 %       ±0.28% ±0.37% ±0.49%
00:25:05.961 streams/pipe.js n=5000000                                                                       ***    -15.50 %       ±0.55% ±0.74% ±0.97%
00:25:05.961 streams/readable-async-iterator.js sync='no' n=100000                                                    0.49 %       ±0.88% ±1.17% ±1.53%
00:25:05.961 streams/readable-async-iterator.js sync='yes' n=100000                                                  -0.01 %       ±1.41% ±1.87% ±2.45%
00:25:05.961 streams/readable-bigread.js n=1000                                                               **      0.88 %       ±0.58% ±0.77% ±1.00%
00:25:05.961 streams/readable-bigunevenread.js n=1000                                                        ***      1.24 %       ±0.45% ±0.60% ±0.78%
00:25:05.961 streams/readable-boundaryread.js type='buffer' n=2000                                                   -0.54 %       ±0.71% ±0.94% ±1.23%
00:25:05.961 streams/readable-boundaryread.js type='string' n=2000                                           ***      2.95 %       ±0.99% ±1.33% ±1.75%
00:25:05.961 streams/readable-from.js type='array' n=10000000                                                ***    -27.06 %       ±1.18% ±1.58% ±2.08%
00:25:05.962 streams/readable-from.js type='async-generator' n=10000000                                      ***     -8.07 %       ±0.91% ±1.20% ±1.57%
00:25:05.962 streams/readable-from.js type='sync-generator-with-async-values' n=10000000                     ***     -9.82 %       ±1.08% ±1.46% ±1.93%
00:25:05.962 streams/readable-from.js type='sync-generator-with-sync-values' n=10000000                      ***    -17.39 %       ±0.58% ±0.77% ±1.02%
00:25:05.962 streams/readable-readall.js n=5000                                                                       1.14 %       ±1.53% ±2.04% ±2.65%
00:25:05.962 streams/readable-uint8array.js kind='encoding' n=1000000                                        ***     -2.04 %       ±1.17% ±1.56% ±2.03%
00:25:05.962 streams/readable-uint8array.js kind='read' n=1000000                                                     0.14 %       ±1.44% ±1.91% ±2.49%
00:25:05.962 streams/readable-unevenread.js n=1000                                                                   -0.53 %       ±0.63% ±0.84% ±1.10%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='no' n=100000            ***     -2.52 %       ±1.43% ±1.91% ±2.49%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='yes' n=100000            **     -2.13 %       ±1.37% ±1.83% ±2.41%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='no' n=100000           ***     -3.13 %       ±1.67% ±2.23% ±2.92%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='yes' n=100000                  -0.48 %       ±0.76% ±1.02% ±1.32%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='no' n=100000                   -0.76 %       ±2.51% ±3.35% ±4.36%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='yes' n=100000                  -0.63 %       ±0.77% ±1.03% ±1.34%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='no' n=100000          ***     -2.23 %       ±0.51% ±0.68% ±0.88%
00:25:05.962 streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='yes' n=100000           *     -1.58 %       ±1.47% ±1.96% ±2.55%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='no' n=100000           ***     -2.27 %       ±1.25% ±1.66% ±2.16%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='yes' n=100000           **     -1.02 %       ±0.76% ±1.01% ±1.31%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='no' n=100000          ***     -3.85 %       ±0.60% ±0.79% ±1.03%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='yes' n=100000                 -1.38 %       ±1.72% ±2.31% ±3.04%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='no' n=100000          ***     -4.49 %       ±2.17% ±2.89% ±3.78%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='yes' n=100000         ***     -0.96 %       ±0.56% ±0.74% ±0.96%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='no' n=100000         ***     -4.60 %       ±1.66% ±2.21% ±2.87%
00:25:05.962 streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='yes' n=100000                -0.66 %       ±1.86% ±2.49% ±3.25%
00:25:05.962 streams/writable-uint8array.js kind='object-mode' n=50000000                                             0.00 %       ±0.54% ±0.71% ±0.93%
00:25:05.962 streams/writable-uint8array.js kind='write' n=50000000                                                   0.19 %       ±0.37% ±0.50% ±0.66%
00:25:05.962 streams/writable-uint8array.js kind='writev' n=50000000                                         ***      0.76 %       ±0.23% ±0.31% ±0.41%
00:25:05.962 
00:25:05.962 Be aware that when doing many comparisons the risk of a false-positive
00:25:05.962 result increases. In this case, there are 43 comparisons, you can thus
00:25:05.962 expect the following amount of false-positive results:
00:25:05.962   2.15 false positives, when considering a   5% risk acceptance (*, **, ***),
00:25:05.962   0.43 false positives, when considering a   1% risk acceptance (**, ***),
00:25:05.962   0.04 false positives, when considering a 0.1% risk acceptance (***)

2nd Streams benchmark URL after having single event handler value

                                                                                         confidence improvement accuracy (*)   (**)  (***)
streams/creation.js kind='duplex' n=50000000                                                    ***     -7.76 %       ±0.65% ±0.86% ±1.13%
streams/creation.js kind='readable' n=50000000                                                  ***      3.22 %       ±0.63% ±0.83% ±1.09%
streams/creation.js kind='transform' n=50000000                                                 ***     11.42 %       ±1.46% ±1.95% ±2.57%
streams/creation.js kind='writable' n=50000000                                                  ***      2.37 %       ±0.63% ±0.84% ±1.09%
streams/destroy.js kind='duplex' n=1000000                                                      ***     -0.98 %       ±0.37% ±0.49% ±0.63%
streams/destroy.js kind='readable' n=1000000                                                             0.69 %       ±2.37% ±3.16% ±4.14%
streams/destroy.js kind='transform' n=1000000                                                   ***     -1.33 %       ±0.59% ±0.78% ±1.02%
streams/destroy.js kind='writable' n=1000000                                                            -0.06 %       ±0.69% ±0.92% ±1.20%
streams/pipe-object-mode.js n=5000000                                                           ***      5.30 %       ±0.27% ±0.35% ±0.46%
streams/pipe.js n=5000000                                                                        **      2.81 %       ±1.91% ±2.58% ±3.42%
streams/readable-async-iterator.js sync='no' n=100000                                           ***      4.83 %       ±1.19% ±1.59% ±2.10%
streams/readable-async-iterator.js sync='yes' n=100000                                                  -0.04 %       ±1.19% ±1.58% ±2.06%
streams/readable-bigread.js n=1000                                                                       0.24 %       ±0.56% ±0.74% ±0.97%
streams/readable-bigunevenread.js n=1000                                                        ***      0.97 %       ±0.52% ±0.70% ±0.91%
streams/readable-boundaryread.js type='buffer' n=2000                                                    0.82 %       ±0.83% ±1.11% ±1.44%
streams/readable-boundaryread.js type='string' n=2000                                                    0.64 %       ±1.24% ±1.66% ±2.16%
streams/readable-from.js type='array' n=10000000                                                ***     -2.85 %       ±1.57% ±2.08% ±2.71%
streams/readable-from.js type='async-generator' n=10000000                                      ***      6.29 %       ±0.46% ±0.61% ±0.80%
streams/readable-from.js type='sync-generator-with-async-values' n=10000000                     ***      9.86 %       ±0.24% ±0.32% ±0.41%
streams/readable-from.js type='sync-generator-with-sync-values' n=10000000                      ***     -2.30 %       ±0.20% ±0.27% ±0.35%
streams/readable-readall.js n=5000                                                               **      2.83 %       ±1.71% ±2.28% ±2.97%
streams/readable-uint8array.js kind='encoding' n=1000000                                        ***     -3.08 %       ±0.92% ±1.23% ±1.61%
streams/readable-uint8array.js kind='read' n=1000000                                                    -0.19 %       ±2.12% ±2.82% ±3.68%
streams/readable-unevenread.js n=1000                                                                   -0.64 %       ±0.96% ±1.29% ±1.68%
streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='no' n=100000                    -1.32 %       ±2.01% ±2.68% ±3.49%
streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='yes' n=100000             *     -0.90 %       ±0.82% ±1.10% ±1.43%
streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='no' n=100000                    2.51 %       ±2.71% ±3.64% ±4.82%
streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='yes' n=100000           **     -1.36 %       ±0.85% ±1.13% ±1.48%
streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='no' n=100000                   -0.37 %       ±2.30% ±3.06% ±3.98%
streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='yes' n=100000            *     -1.00 %       ±0.83% ±1.11% ±1.45%
streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='no' n=100000                  -0.37 %       ±1.59% ±2.12% ±2.75%
streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='yes' n=100000                 -0.89 %       ±1.63% ±2.17% ±2.83%
streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='no' n=100000           ***      6.52 %       ±1.53% ±2.05% ±2.68%
streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='yes' n=100000            *     -0.74 %       ±0.65% ±0.87% ±1.13%
streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='no' n=100000                   0.82 %       ±1.62% ±2.16% ±2.81%
streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='yes' n=100000                 -1.05 %       ±1.43% ±1.91% ±2.49%
streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='no' n=100000           **      3.73 %       ±2.64% ±3.52% ±4.60%
streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='yes' n=100000                 -0.34 %       ±0.61% ±0.82% ±1.07%
streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='no' n=100000          **      1.97 %       ±1.29% ±1.72% ±2.26%
streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='yes' n=100000         **     -1.64 %       ±1.00% ±1.34% ±1.74%
streams/writable-uint8array.js kind='object-mode' n=50000000                                            -0.05 %       ±0.38% ±0.51% ±0.67%
streams/writable-uint8array.js kind='write' n=50000000                                           **      0.30 %       ±0.18% ±0.24% ±0.31%
streams/writable-uint8array.js kind='writev' n=50000000                                         ***      0.61 %       ±0.31% ±0.42% ±0.54%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 43 comparisons, you can thus
expect the following amount of false-positive results:
  2.15 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.43 false positives, when considering a   1% risk acceptance (**, ***),
  0.04 false positives, when considering a 0.1% risk acceptance (***)

Merge request reports

Loading