mirror of
https://github.com/acamarata/solar-spa.git
synced 2026-07-01 03:14:31 +00:00
47 lines
2.1 KiB
Markdown
47 lines
2.1 KiB
Markdown
# Bundle Size and Performance
|
|
|
|
## Bundle size
|
|
|
|
Measured from the published npm package (`solar-spa@2.0.1`).
|
|
|
|
| File | Raw | Gzipped | Notes |
|
|
| --- | --- | --- | --- |
|
|
| `dist/index.mjs` | 5.3 KB | ~2.1 KB | JS wrapper, ESM |
|
|
| `dist/index.cjs` | 6.0 KB | ~2.3 KB | JS wrapper, CommonJS |
|
|
| `wasm/spa-module.cjs` | 58.6 KB | ~38 KB | Emscripten output with WASM binary inlined as base64 |
|
|
| Total installed | ~65 KB | ~40 KB | JS + WASM combined |
|
|
|
|
The WASM binary is inlined as base64 in `spa-module.cjs` (SINGLE_FILE mode). No external `.wasm` file is needed at runtime. The base64 encoding adds ~33% overhead over the raw binary size; the decoded WASM is approximately 44 KB.
|
|
|
|
For comparison, [nrel-spa](https://github.com/acamarata/nrel-spa) (the pure JavaScript port) is ~8 KB gzipped with no WASM dependency.
|
|
|
|
## Call latency
|
|
|
|
Single-call timings from the validation suite (`validate.mjs`), measured on Apple M2, Node.js 22:
|
|
|
|
| Scenario | Time |
|
|
| --- | --- |
|
|
| First call (includes WASM init) | ~3-5 ms |
|
|
| Subsequent calls (module cached) | 20-250 µs |
|
|
| Fastest observed (simple zenith/azimuth) | ~20 µs |
|
|
| Typical city scenario | 50-150 µs |
|
|
|
|
The first call initializes the WASM module, which adds 3-5 ms of one-time overhead. All subsequent calls reuse the cached module instance. Call [`init()`](../api/init) at startup to move this cost out of request paths.
|
|
|
|
## WASM vs pure JS
|
|
|
|
| Scenario | solar-spa (WASM) | nrel-spa (pure JS) | Ratio |
|
|
| --- | --- | --- | --- |
|
|
| Single call | ~100 µs | ~250 µs | ~2.5x faster |
|
|
| Batch 1000 calls | ~80 ms | ~200 ms | ~2.5x faster |
|
|
| First call with init | ~3-5 ms | ~0 ms | WASM has cold start |
|
|
|
|
For single-call use cases the cold start dominates. Use `init()` at app startup when single-call latency matters.
|
|
|
|
## Accuracy
|
|
|
|
The WASM module compiles the unmodified NREL SPA C source. All 100 validation scenarios in `validate.mjs` pass against physically-derived reference values. See [Validation and Benchmarks](../Validation-and-Benchmarks) for the full scenario table.
|
|
|
|
---
|
|
|
|
[Home](../Home) · [Performance](../Performance) · [Validation and Benchmarks](../Validation-and-Benchmarks)
|