Announcing InversifyJS 8.1.3
We're happy to announce InversifyJS 8.1.3, a release focused on performance optimizations in the container resolution path.
Dependency injection is rarely the bottleneck in a well-designed application, so we do not want to oversell microbenchmark wins as a universal upgrade story. That said, if your codebase relies on complex transient services or resolves large object graphs repeatedly, this release can reduce overhead in the places where container work is actually visible.
The benchmarks below were taken from packages/container/tools/container-benchmarks/src/bin/run.ts and compare the current implementation against previous InversifyJS releases.
[CJS] Running benchmarks...
Get service in singleton scope
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโ
โ (index) โ Task name โ Latency avg (ns) โ Latency med (ns) โ Throughput avg (ops/s) โ Throughput med (ops/s) โ Samples โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโค
โ 0 โ 'inversifyCurrent' โ '256.36 ยฑ 0.17%' โ '240.00 ยฑ 10.00' โ '4085114 ยฑ 0.01%' โ '4166667 ยฑ 166667' โ 3900747 โ
โ 1 โ 'inversify6' โ '1115.0 ยฑ 0.27%' โ '1022.0 ยฑ 30.00' โ '945343 ยฑ 0.03%' โ '978474 ยฑ 27903' โ 896894 โ
โ 2 โ 'inversify7' โ '314.98 ยฑ 0.14%' โ '291.00 ยฑ 9.00' โ '3296324 ยฑ 0.01%' โ '3436426 ยฑ 103093' โ 3174774 โ
โ 3 โ 'inversify8' โ '276.02 ยฑ 0.13%' โ '260.00 ยฑ 10.00' โ '3766103 ยฑ 0.01%' โ '3846154 ยฑ 142450' โ 3622979 โ
โ 4 โ 'awilix' โ '233.92 ยฑ 0.34%' โ '211.00 ยฑ 9.00' โ '4561593 ยฑ 0.01%' โ '4739337 ยฑ 193882' โ 4274933 โ
โ 5 โ 'NestJS' โ '327.08 ยฑ 0.36%' โ '301.00 ยฑ 9.00' โ '3211162 ยฑ 0.01%' โ '3322259 ยฑ 96453' โ 3057333 โ
โ 6 โ 'tsyringe' โ '309.53 ยฑ 0.31%' โ '290.00 ยฑ 10.00' โ '3385338 ยฑ 0.01%' โ '3448276 ยฑ 123153' โ 3230725 โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโ
inversifyCurrent vs inversify6 Speedup: 4.321x
inversifyCurrent vs inversify7 Speedup: 1.239x
inversifyCurrent vs inversify8 Speedup: 1.085x
inversifyCurrent vs awilix Speedup: 0.896x
inversifyCurrent vs NestJS Speedup: 1.272x
inversifyCurrent vs tsyringe Speedup: 1.207x
Get service in transient scope
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโ
โ (index) โ Task name โ Latency avg (ns) โ Latency med (ns) โ Throughput avg (ops/s) โ Throughput med (ops/s) โ Samples โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโค
โ 0 โ 'inversifyCurrent' โ '281.41 ยฑ 0.25%' โ '261.00 ยฑ 10.00' โ '3702193 ยฑ 0.01%' โ '3831418 ยฑ 141381' โ 3553538 โ
โ 1 โ 'inversify6' โ '5750.8 ยฑ 0.28%' โ '5350.0 ยฑ 80.00' โ '180996 ยฑ 0.05%' โ '186916 ยฑ 2754' โ 173890 โ
โ 2 โ 'inversify7' โ '609.69 ยฑ 0.15%' โ '581.00 ยฑ 10.00' โ '1690669 ยฑ 0.01%' โ '1721170 ยฑ 30143' โ 1640183 โ
โ 3 โ 'inversify8' โ '445.85 ยฑ 0.28%' โ '401.00 ยฑ 10.00' โ '2386816 ยฑ 0.02%' โ '2493766 ยฑ 60676' โ 2242894 โ
โ 4 โ 'awilix' โ '449.01 ยฑ 0.38%' โ '421.00 ยฑ 10.00' โ '2323630 ยฑ 0.01%' โ '2375297 ยฑ 55111' โ 2227134 โ
โ 5 โ 'NestJS' โ '11058 ยฑ 1.98%' โ '9397.0 ยฑ 290.00' โ '100822 ยฑ 0.10%' โ '106417 ยฑ 3377' โ 90431 โ
โ 6 โ 'tsyringe' โ '468.15 ยฑ 0.16%' โ '441.00 ยฑ 10.00' โ '2213899 ยฑ 0.01%' โ '2267574 ยฑ 52612' โ 2136062 โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโ
inversifyCurrent vs inversify6 Speedup: 20.455x
inversifyCurrent vs inversify7 Speedup: 2.190x
inversifyCurrent vs inversify8 Speedup: 1.551x
inversifyCurrent vs awilix Speedup: 1.593x
inversifyCurrent vs NestJS Speedup: 36.720x
inversifyCurrent vs tsyringe Speedup: 1.672x
Get complex service in singleton scope
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโ
โ (index) โ Task name โ Latency avg (ns) โ Latency med (ns) โ Throughput avg (ops/s) โ Throughput med (ops/s) โ Samples โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโค
โ 0 โ 'inversifyCurrent' โ '264.21 ยฑ 0.25%' โ '250.00 ยฑ 9.00' โ '3931347 ยฑ 0.01%' โ '4000000 ยฑ 149378' โ 3784803 โ
โ 1 โ 'inversify6' โ '1120.0 ยฑ 1.66%' โ '1022.0 ยฑ 30.00' โ '943130 ยฑ 0.02%' โ '978474 ยฑ 28806' โ 892870 โ
โ 2 โ 'inversify7' โ '315.64 ยฑ 0.37%' โ '291.00 ยฑ 10.00' โ '3331150 ยฑ 0.01%' โ '3436426 ยฑ 114167' โ 3168127 โ
โ 3 โ 'inversify8' โ '286.70 ยฑ 0.36%' โ '261.00 ยฑ 9.00' โ '3668124 ยฑ 0.01%' โ '3831418 ยฑ 127714' โ 3487997 โ
โ 4 โ 'awilix' โ '258.01 ยฑ 0.26%' โ '241.00 ยฑ 10.00' โ '4047521 ยฑ 0.01%' โ '4149378 ยฑ 165314' โ 3875780 โ
โ 5 โ 'NestJS' โ '335.19 ยฑ 0.15%' โ '311.00 ยฑ 10.00' โ '3088769 ยฑ 0.01%' โ '3215434 ยฑ 100169' โ 2983398 โ
โ 6 โ 'tsyringe' โ '319.12 ยฑ 0.31%' โ '300.00 ยฑ 10.00' โ '3274949 ยฑ 0.01%' โ '3333333 ยฑ 107527' โ 3133607 โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโ
inversifyCurrent vs inversify6 Speedup: 4.168x
inversifyCurrent vs inversify7 Speedup: 1.180x
inversifyCurrent vs inversify8 Speedup: 1.072x
inversifyCurrent vs awilix Speedup: 0.971x
inversifyCurrent vs NestJS Speedup: 1.273x
inversifyCurrent vs tsyringe Speedup: 1.200x
Get complex service in transient scope
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโ
โ (index) โ Task name โ Latency avg (ns) โ Latency med (ns) โ Throughput avg (ops/s) โ Throughput med (ops/s) โ Samples โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโค
โ 0 โ 'inversifyCurrent' โ '72890 ยฑ 0.67%' โ '68157 ยฑ 2084.0' โ '14239 ยฑ 0.20%' โ '14672 ยฑ 452' โ 13720 โ
โ 1 โ 'inversifyCurrent (Resolved Value)' โ '76522 ยฑ 0.46%' โ '74499 ยฑ 1523.0' โ '13289 ยฑ 0.13%' โ '13423 ยฑ 274' โ 13069 โ
โ 2 โ 'inversify6' โ '5389772 ยฑ 2.50%' โ '5120533 ยฑ 57307' โ '189 ยฑ 1.44%' โ '195 ยฑ 2' โ 186 โ
โ 3 โ 'inversify7' โ '317547 ยฑ 0.74%' โ '306793 ยฑ 2199.5' โ '3198 ยฑ 0.28%' โ '3260 ยฑ 23' โ 3150 โ
โ 4 โ 'inversify8' โ '181530 ยฑ 0.62%' โ '176230 ยฑ 751.00' โ '5575 ยฑ 0.17%' โ '5674 ยฑ 24' โ 5509 โ
โ 5 โ 'awilix' โ '280252 ยฑ 0.34%' โ '274372 ยฑ 2154.0' โ '3588 ยฑ 0.18%' โ '3645 ยฑ 29' โ 3569 โ
โ 6 โ 'NestJS' โ '81098 ยฑ 1.65%' โ '72105 ยฑ 1392.0' โ '13213 ยฑ 0.24%' โ '13869 ยฑ 269' โ 12331 โ
โ 7 โ 'tsyringe' โ '226590 ยฑ 0.43%' โ '220552 ยฑ 2736.0' โ '4454 ยฑ 0.20%' โ '4534 ยฑ 57' โ 4414 โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโ
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 1.071x
inversifyCurrent vs inversify6 Speedup: 75.489x
inversifyCurrent vs inversify7 Speedup: 4.452x
inversifyCurrent vs inversify8 Speedup: 2.554x
inversifyCurrent vs awilix Speedup: 3.969x
inversifyCurrent vs NestJS Speedup: 1.078x
inversifyCurrent vs tsyringe Speedup: 3.197x
Get complex async service in transient scope
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโ
โ (index) โ Task name โ Latency avg (ns) โ Latency med (ns) โ Throughput avg (ops/s) โ Throughput med (ops/s) โ Samples โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโค
โ 0 โ 'inversifyCurrent' โ '368917 ยฑ 0.83%' โ '353280 ยฑ 7113.0' โ '2767 ยฑ 0.38%' โ '2831 ยฑ 57' โ 2711 โ
โ 1 โ 'inversify6' โ '5036349 ยฑ 2.42%' โ '4741104 ยฑ 94917' โ '202 ยฑ 1.50%' โ '211 ยฑ 4' โ 199 โ
โ 2 โ 'inversify7' โ '720247 ยฑ 0.83%' โ '699286 ยฑ 5881.0' โ '1405 ยฑ 0.42%' โ '1430 ยฑ 12' โ 1389 โ
โ 3 โ 'inversify8' โ '592877 ยฑ 0.98%' โ '569894 ยฑ 7464.0' โ '1718 ยฑ 0.47%' โ '1755 ยฑ 23' โ 1687 โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโ
inversifyCurrent vs inversify6 Speedup: 13.689x
inversifyCurrent vs inversify7 Speedup: 1.969x
inversifyCurrent vs inversify8 Speedup: 1.610x
What improvedโ
The strongest improvements show up when resolving transient services:
- Get service in transient scope:
281.41 nsaverage latency, about 1.58x faster than InversifyJS 8.0 - Get complex service in transient scope:
72,890 nsaverage latency, about 2.49x faster than InversifyJS 8.0 - Get complex async service in transient scope:
368,917 nsaverage latency, about 1.61x faster than InversifyJS 8.0
Singleton resolution also improved modestly:
- Get service in singleton scope:
256.36 nsaverage latency, about 1.08x faster than InversifyJS 8.0 - Get complex service in singleton scope:
264.21 nsaverage latency, about 1.09x faster than InversifyJS 8.0
For reference, the current implementation also remains significantly faster than InversifyJS 6 and 7 in the scenarios we benchmarked, especially in transient-heavy workloads.
What this means for youโ
If your application mostly resolves a few long-lived services, you may not notice a dramatic end-to-end change. If, however, you build plugin systems, request-scoped graphs, or other transient-heavy designs, this release should shave off some container overhead without requiring any code changes.
As always, benchmark data should be read in context. Measure your own application if you want to understand where the real bottlenecks are, but if container resolution is part of that profile, 8.1.3 should be a worthwhile upgrade.
Thanks for trying out InversifyJS 8.1.3, and please let us know if you run into any issues.
