fast-is-equal
v1.3.1
Published
Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual—because speed matters.
Downloads
731,250
Maintainers
Readme
fast-is-equal
⚡️Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual - because speed matters.
Why fast-is-equal?
- 🚀 Lightning Speed: Up to 64.53x faster than Lodash's
isEqual(average 13.21x faster across 49 test cases). - 🪶 Lightweight: Dependency-free, minimal footprint.
- 🔄 Versatile: Handles primitives, objects, arrays, Maps, Sets, typed arrays, circular references, and more.
- 🏆 Proven: Outperforms Lodash in 98% of benchmark cases.
Installation
Using yarn:
yarn add fast-is-equalUsing npm:
npm install fast-is-equalUsage
import { fastIsEqual } from 'fast-is-equal';
console.log(fastIsEqual(1, 1)); // true
console.log(fastIsEqual({ a: 1 }, { a: 1 })); // true
console.log(fastIsEqual([1, 2], [1, 3])); // falsePerformance Benchmarks
fast-is-equal was tested against Lodash's isEqual across 49 diverse test cases with 1,000,000 iterations each. The results speak for themselves:
Key Highlights
- Average Speed:
fastIsEqualis 13.21x faster (0.000147 ms vs. 0.001941 ms). - Win Rate: Outperforms Lodash in 48/49 cases (98.0%).
- Peak Performance: Up to 64.53x faster for large Sets.
Top 10 Performance Gains
| Test Case | fastIsEqual (ms) | Lodash isEqual (ms) | Speed Boost | | ----------------------- | ---------------- | ------------------- | ------------ | | Large Set (100 items) | 0.000585 | 0.037756 | 64.53x 🚀 | | Large Map (50 entries) | 0.000912 | 0.025252 | 27.70x 🚀 | | Map vs Set | 0.000018 | 0.000469 | 26.45x 🚀 | | ArrayBuffer (small) | 0.000068 | 0.001242 | 18.40x 🚀 | | Empty Map | 0.000037 | 0.000661 | 18.04x 🚀 | | Empty Set | 0.000037 | 0.000668 | 17.96x 🚀 | | Map with primitives | 0.000081 | 0.001405 | 17.27x 🚀 | | Uint8Array | 0.000038 | 0.000654 | 17.08x 🚀 | | Map (unequal) | 0.000080 | 0.001316 | 16.41x 🚀 | | Float32Array | 0.000041 | 0.000652 | 15.72x 🚀 |
Performance Across Categories
- Primitives: Competitive performance with smart optimizations for edge cases like NaN
- Objects: 1.45x–3.02x faster, with best gains on simple and nested structures
- Arrays: 2.40x–4.06x faster, excelling at primitive arrays and sparse arrays
- TypedArrays: 12.62x–17.08x faster, dramatically outperforming on all variants
- Special Objects: 9.43x–10.95x faster for Dates and RegExp
- Collections: 11.34x–64.53x faster for Maps and Sets, with exceptional gains on large collections
- Circular References: 3.48x–3.87x faster with optimized cycle detection
Detailed Benchmark Results
Run yarn benchmark or npm run benchmark to test locally. Full results available in benchmarks/results.txt.
Edge Cases Where Lodash Wins
Only 1 case where Lodash marginally outperforms:
- Strings: 0.85x slower
This is a ~5-nanosecond comparison at the benchmark's measurement resolution, with negligible real-world impact.
Features
- Dependency-Free: No bloat, just performance.
- Comprehensive: Supports all JavaScript types, including edge cases like circular references and typed arrays.
- Optimized: Fine-tuned for real-world use cases (e.g., API responses, state objects).
License
MIT
