Releases: saehm/DruidJS
Release list
v0.9.0
What's Changed
- WASM (AssemblyScript + SIMD) kernels with JS fallbacks for the matrix, DR and clustering hot paths
- Added DR methods: PaCMAP, LocalMAP, StressMDS, KKMDS, MINFOTree
- Added Ward linkage to HierarchicalClustering
- Repaired HNSW, LSH, NNDescent and BallTree; unified the KNN parameter defaults
- Corrected UMAP, and moved TriMap to the 1.1.5 algorithm
- Pluggable KNN index in LLE, LTSA, PaCMAP and LocalMAP
- Replaced the Mersenne Twister randomizer with sfc32
- New documentation pages and showcases
Performance
1.71× across 44 cases, benchmarked between the two published packages on Node 24. The third
column re-runs 0.9.0 with setWasmEnabled(false), separating what the kernels bought from what the
rewrites bought:
| Group | 0.9.0 | WASM off |
|---|---|---|
| dimred | 2.35× | 1.20× |
| knn-search | 2.24× | 2.29× |
| matrix | 2.21× | 1.02× |
| knn-build | 1.30× | 1.40× |
| clustering | 1.15× | 1.12× |
| metrics | 0.97× | 1.02× |
Matrix and dimred are the kernels; knn-search is the index repairs, which touch no kernels at all.
Best individual cases: SQDMDS 23× (82 → 4 ms), SMACOF 12.9× (1132 → 87 ms), LSH search
8.4×, BallTree search 4.2×, dot 400×400 4.1×, t-SNE 3.1×, PCA 2.8×.
LSH build is 2.5× slower on purpose — 0.9.0 estimates the bucket width from the data instead of a
constant that made every point collide, which is what buys the 8.4× search.
Correctness
scanned is the fraction of the dataset a query actually computes distances for; an approximate
index scanning ~1.0 is not an index.
| Index | recall 0.8.0 | recall 0.9.0 | scanned 0.8.0 | scanned 0.9.0 |
|---|---|---|---|---|
| HNSW | 0.635 | 1.000 | 0.135 | 0.170 |
| NNDescent | crash | 0.841 | crash | 0.161 |
| LSH | 1.000 | 0.749 | 1.000 | 0.058 |
| BallTree | 1.000 | 1.000 | 0.915 | 0.267 |
HNSW returned the right neighbour 64% of the time in 0.8.0, NNDescent did not run at all, and LSH
was a brute-force scan — its 1.000 recall was an artifact of that. Also fixed: MeanShift's JS
fallback disagreed with its kernel, and PCA returned stale projections after parameter().
DR quality is unchanged or better throughout.
- Badges by @saehm in #41
- Add PaCMAP and LocalMAP dimensionality reduction algorithms by @patcon in #49
New Contributors
Full Changelog: v0.8.0...v0.9.0
v0.8.0
What's Changed
- Many bugfixes
- New Documentation
- Added DR methods: SMACOF
- Added KNN methods: ANNOY, KDTree, LSH, NNDescent
- Added Clustering methods: CURE, MeanShift, XMeans
- Types
- Bugfix in UMAP algorithm by @johkehrer in #29
- Bump terser from 5.10.0 to 5.14.2 by @dependabot[bot] in #31
Full Changelog: v0.6.0...v0.8.0