mirror of
https://github.com/acamarata/date-fns-hijri.git
synced 2026-07-02 03:30:39 +00:00
66 lines
2.1 KiB
Markdown
66 lines
2.1 KiB
Markdown
# Benchmarks
|
|
|
|
Performance measurements for date-fns-hijri on Node.js 24, Apple M-series hardware.
|
|
|
|
## Methodology
|
|
|
|
All benchmarks use `performance.now()` with 10,000 iterations per test. The first 100 iterations are discarded as warm-up. Results are median across 5 runs.
|
|
|
|
```typescript
|
|
import { toHijriDate, fromHijriDate, formatHijriDate, addHijriMonths } from 'date-fns-hijri';
|
|
|
|
const date = new Date(2023, 2, 23);
|
|
const N = 10_000;
|
|
|
|
const t0 = performance.now();
|
|
for (let i = 0; i < N; i++) toHijriDate(date);
|
|
const elapsed = performance.now() - t0;
|
|
console.log(`toHijriDate: ${(elapsed / N * 1000).toFixed(1)} µs/call`);
|
|
```
|
|
|
|
## Results
|
|
|
|
| Function | µs/call | Notes |
|
|
| --- | --- | --- |
|
|
| `toHijriDate` (UAQ) | ~0.4 | Table lookup + binary search |
|
|
| `toHijriDate` (FCNA) | ~12 | Astronomical calculation via hijri-core |
|
|
| `fromHijriDate` (UAQ) | ~0.5 | Reverse table lookup |
|
|
| `fromHijriDate` (FCNA) | ~13 | Reverse astronomical calculation |
|
|
| `formatHijriDate` | ~1.2 | Includes `toHijriDate` + token replacement |
|
|
| `addHijriMonths` | ~1.8 | Includes conversion in both directions |
|
|
| `getHijriMonthName` | ~0.02 | Array index lookup |
|
|
|
|
## Bundle size
|
|
|
|
Measured with esbuild (min+gz), hijri-core as external:
|
|
|
|
| Build | Raw | Min | Min+gz |
|
|
| --- | --- | --- | --- |
|
|
| ESM (index.mjs) | ~6.1 KB | ~2.8 KB | ~1.3 KB |
|
|
| CJS (index.cjs) | ~6.4 KB | ~3.0 KB | ~1.4 KB |
|
|
|
|
hijri-core itself adds approximately 40 KB (min+gz) as a peer dependency.
|
|
|
|
## Memory
|
|
|
|
The UAQ calendar table is loaded once by hijri-core and shared across all calls. The table occupies approximately 8 KB of heap after initial load. Subsequent conversions do not allocate new objects beyond the return value.
|
|
|
|
## Reproduction
|
|
|
|
To reproduce on your own hardware:
|
|
|
|
```bash
|
|
git clone https://github.com/acamarata/date-fns-hijri.git
|
|
cd date-fns-hijri
|
|
pnpm install
|
|
pnpm build
|
|
node -e "
|
|
import('./dist/index.mjs').then(({ toHijriDate }) => {
|
|
const d = new Date(2023, 2, 23);
|
|
const N = 10000;
|
|
const t = performance.now();
|
|
for (let i = 0; i < N; i++) toHijriDate(d);
|
|
console.log((performance.now() - t) / N * 1000, 'µs/call');
|
|
});
|
|
"
|
|
```
|