fast-is-equal

Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual—because speed matters.
3,281,956 18
Install
npm install fast-is-equal
Latest Version:1.3.3
License:MIT
Last Updated:Oct 17, 2026
Links: GitHub  ·  npm
Maintainer: futurejj

fast-is-equal

⚡️Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual - because speed matters.

npm version License npm bundle size Workflow Status Coverage React Compatibility React Native Compatibility Angular Compatibility Vue Compatibility Svelte Compatibility Modern JS Frameworks Sponsor

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-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 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

🙏 Support the project

Related Packages

@opuu/inview

Lightweight JavaScript library for viewport detection with debounced callbacks -...

3,694 10
network-speed-js

A framework-agnostic network speed testing SDK based on Performance API with int...

3,560 4
@ui18n/core

🚀 The fastest zero-dependency internationalization engine with AI-ready transla...

3,021
notify-zh

Extremely lightweight (~2.7 KB gzipped), zero-dependency toast notification libr...

1,294 6
keen-slider

The HTML touch slider carousel with the most native feeling you will get.

12,051,087 5,019

Version History

Version Released License
1.3.3 MIT
1.3.2 MIT
1.3.1 MIT
1.3.0 MIT
1.2.7 MIT