Package Exports
- fast-is-equal
- fast-is-equal/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fast-is-equal) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
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 55.84x faster than Lodash's
isEqual
(average 11.73x 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 93.9% of benchmark cases.
Installation
Using yarn:
yarn add fast-is-equal
Using npm:
npm install fast-is-equal
Usage
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])); // false
Performance 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:
fastIsEqual
is 11.73x faster (0.000172 ms vs. 0.002013 ms). - Win Rate: Outperforms Lodash in 46/49 cases (93.9%).
- Peak Performance: Up to 55.84x faster for large Sets.
Top 10 Performance Gains
Test Case | fastIsEqual (ms) | Lodash isEqual (ms) | Speed Boost |
---|---|---|---|
Large Set (100 items) | 0.000673 | 0.037564 | 55.84x 🚀 |
Map vs Set | 0.000018 | 0.000485 | 26.52x 🚀 |
Large Map (50 entries) | 0.001059 | 0.025756 | 24.32x 🚀 |
Map with primitives | 0.000092 | 0.001487 | 16.09x 🚀 |
Map (unequal) | 0.000092 | 0.001406 | 15.29x 🚀 |
Large TypedArray (1000) | 0.000944 | 0.013165 | 13.95x 🚀 |
ArrayBuffer (small) | 0.000092 | 0.001263 | 13.74x 🚀 |
Empty Set | 0.000058 | 0.000691 | 11.96x 🚀 |
Empty Map | 0.000058 | 0.000684 | 11.84x 🚀 |
Set of strings | 0.000082 | 0.000940 | 11.51x 🚀 |
Performance Across Categories
- Primitives: Competitive performance with smart optimizations for edge cases like NaN
- Objects: 1.59x–2.87x faster, with best gains on simple and nested structures
- Arrays: 1.24x–4.38x faster, excelling at primitive arrays and sparse arrays
- TypedArrays: 11.30x–13.95x faster, dramatically outperforming on all variants
- Special Objects: 8.63x–10.25x faster for Dates and RegExp
- Collections: 10.84x–55.84x faster for Maps and Sets, with exceptional gains on large collections
- Circular References: 3.04x–3.72x 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 3 cases where Lodash marginally outperforms (by less than 5%):
- String vs Number: 0.95x slower
- Large Numbers: 0.99x slower
- Boolean vs Number: 0.99x slower
These represent cross-type comparisons 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