object-code
v2.0.0
Published
A blazing fast hash code generator that supports every possible javascript value.
Readme
Table of Contents
- Table of Contents
- Installing
- Getting Started
- Hashing & Collision Resistance
- Compatibility
- Benchmark
- License
Installing
Node
npm install object-code # or yarn add object-codeconst { hash } = require('object-code');
import { hash } from 'object-code';Browser
<script
crossorigin
src="https://cdn.jsdelivr.net/npm/object-code@latest/dist/index.umd.js"
></script>const { hash } = window.objectCode;Url Import
import { hash } from 'https://cdn.skypack.dev/object-code@latest';Getting Started
Object code is a blazing fast hash code generator. It generates unique signed integers for objects, arrays, functions, symbols and etc.
You can ise it to index object in a collection, compare objects or just generate unique identifiers.
import { hash } from 'object-code';
const myWeirdObject = {
name: 'Arthur',
age: 20,
address: {
private: true
},
sayHello: function () {
console.log('Hello!');
},
id: Symbol('arthur'),
birth: new Date(2005, 02, 27),
tags: ['person', 'male', 'programmer']
recursive: myWeirdObject,
// etc
};
const hash = hash(myWeirdObject);
// -1352827948Hashing & Collision Resistance
Object Code uses a modified DJB2 algorithm with special handling for edge cases to provide excellent collision resistance while maintaining high performance.
How it works
- Uses bitwise XOR operations (much faster than cryptographic hashing)
- Hashes the type separately from the value to prevent cross-type collisions
- NaN, Infinity, -Infinity, and very large numbers are normalized to prevent collisions
- Objects and arrays are hashed recursively with circular reference detection
Collision Probability
The hash function produces 32-bit signed integers, giving approximately 4.3 billion unique values. While not cryptographically secure, it provides:
- Zero collisions in our test suite of hundreds of diverse values (including edge cases)
- Excellent distribution for typical use cases (object indexing, memoization, comparison)
- Special handling to avoid common collision patterns
Note: This is a non-cryptographic hash function optimized for speed. Don't use it for security purposes like password hashing or data integrity verification.
Compatibility
See all unique values at test/values.ts
This package is always seeking for a faster implementation. This means that we don't guarantee that the hash will be the same for two different versions of this package. There will be an warning on the release notes if the hash generation changed.
You shouldn't rely on cross version compatibility, and even if so, you can run some tests before pushing to production :)
Benchmark
This is the result of a benchmark between object-hash and
object-code:
Running "Benchmark (Object)" suite...
Progress: 100%
Object Code:
214 853 ops/s, ±0.73% | fastest
Object Hash:
24 568 ops/s, ±0.65% | slowest, 88.57% slower
Running "Benchmark (Jsonified Object)" suite...
Progress: 100%
Object Code:
201 261 ops/s, ±0.63% | fastest
Object Hash:
135 867 ops/s, ±0.63% | slowest, 32.49% slower
Running "Benchmark (String)" suite...
Progress: 100%
Object Code:
2 112 297 ops/s, ±1.37% | fastest
Object Hash:
381 451 ops/s, ±1.62% | slowest, 81.94% slowerLicense
Licensed under the MIT. See LICENSE for more informations.
