Comparison with Immer
Mutative is a high-performance immutable update library, and Immer is a popular immutable update library. This page compares the differences between Mutative and Immer.
Difference between Mutative and Immer
Mutative | Immer | |
---|---|---|
Custom shallow copy | ✅ | ❌ |
Strict mode | ✅ | ❌ |
No data freeze by default | ✅ | ❌ |
Non-invasive marking | ✅ | ❌ |
Complete freeze data | ✅ | ❌ |
Non-global config | ✅ | ❌ |
async draft function | ✅ | ❌ |
Fully compatible with JSON Patch spec | ✅ | ❌ |
Mutative has fewer bugs such as accidental draft escapes than Immer, view details.
Mutative vs Immer Performance
Mutative passed all of Immer's test cases.
Measure(ops/sec) to update 50K arrays and 1K objects, bigger is better(view source). [Mutative v1.0.5 vs Immer v10.1.1]
Naive handcrafted reducer - No Freeze x 4,442 ops/sec ±0.38% (95 runs sampled)
Mutative - No Freeze x 6,199 ops/sec ±0.79% (89 runs sampled)
Immer - No Freeze x 5.30 ops/sec ±0.38% (18 runs sampled)
Mutative - Freeze x 974 ops/sec ±1.77% (92 runs sampled)
Immer - Freeze x 376 ops/sec ±0.67% (92 runs sampled)
Mutative - Patches and No Freeze x 969 ops/sec ±0.99% (97 runs sampled)
Immer - Patches and No Freeze x 5.27 ops/sec ±0.36% (18 runs sampled)
Mutative - Patches and Freeze x 514 ops/sec ±0.97% (95 runs sampled)
Immer - Patches and Freeze x 275 ops/sec ±0.74% (89 runs sampled)
The fastest method is Mutative - No Freeze
Run yarn benchmark
to measure performance.
OS: macOS 14.2.1, CPU: Apple M1 Max, Node.js: v20.11.0
Immer relies on auto-freeze to be enabled, if auto-freeze is disabled, Immer will have a huge performance drop and Mutative will have a huge performance lead, especially with large data structures it will have a performance lead of more than 50x.
So if you are using Immer, you will have to enable auto-freeze for performance. Mutative is disabled auto-freeze by default. With the default configuration of both, we can see the 16x performance gap between Mutative (6,199 ops/sec
) and Immer (376 ops/sec
).
Overall, Mutative has a huge performance lead over Immer in more performance testing scenarios. Run yarn performance
to get all the performance results locally.