mirror of
https://github.com/acamarata/hijri-core.git
synced 2026-06-30 18:54:27 +00:00
1.9 KiB
1.9 KiB
Benchmarks
Performance and bundle-size data for hijri-core@1.0.1.
Bundle size
Measured from the published ESM build (dist/index.mjs). The package ships a dual CJS+ESM output; sizes are nearly identical.
| Format | Minified | Gzipped |
|---|---|---|
ESM (dist/index.mjs) |
20.8 KB | 5.3 KB |
CJS (dist/index.cjs) |
22.3 KB | 5.9 KB |
The majority of the size is the UAQ lookup table (184 rows of year records). The conversion logic itself is small.
Conversion throughput
Single-threaded, Node.js 22, Apple M-series chip. 100,000 iterations per function. Results are representative for production workloads.
| Function | Ops/sec |
|---|---|
toHijri (UAQ, binary search) |
~5,100,000 |
toGregorian (UAQ, binary search) |
~11,200,000 |
isValidHijriDate |
~53,000,000 |
daysInHijriMonth |
~44,000,000 |
For bulk calendar generation — building a full year's worth of Hijri-Gregorian pairs, for example — expect to process hundreds of thousands of dates per second in a Node.js context.
Methodology
import { toHijri, toGregorian } from 'hijri-core';
const N = 100_000;
const date = new Date('2025-03-01');
const t0 = performance.now();
for (let i = 0; i < N; i++) toHijri(date);
const t1 = performance.now();
const opsPerSec = Math.round(N / ((t1 - t0) / 1000));
console.log(`toHijri: ${opsPerSec.toLocaleString()} ops/sec`);
Run node --input-type=module with the snippet above after pnpm build to reproduce.
Notes
- The UAQ engine uses O(log n) binary search over 184 rows. A linear scan would be ~7x slower.
- The FCNA engine runs trigonometric new-moon calculations; throughput is lower (~100,000-200,000 ops/sec). Use FCNA when accuracy to the North American criterion matters; use UAQ for display and calendar grids.
- There are no allocations beyond the returned
HijriDateobject. The engine itself holds no mutable state.