Webアプリで統計学の計算をしたいのでJavaScriptの数学ライブラリであるMath.jsを使ってみた。
使用したのは行列計算をおこなうmultiply, invと二項係数を計算するcombinationsの3つの関数。
通常通りnamed importでインポートしたところ関数は問題なく使用できた。
import { multiply, inv, combinations } from "mathjs";multiply(inv(a), b)
しかし、このままReactやNext.jsでビルドしてみると生成されたバンドルファイルのサイズが大きくなっていた。
bundle-analyzerでバンドルサイズを可視化してみる。
中央の青い部分がMath.jsを使ったことにより増えたファイル。
3つの関数しか使っていないのに約600kbの大きさがある。(Three.jsやKatexも大きいけどこれはどうしようもない・・・)
よく見ると使用していない関数やデータ型もバンドルされているらしい。
使用している関数とそれに依存するものだけをバンドルしたい場合は、関数名+'Dependencies'のモジュールをインポートしてcreateで関数を生成させる。
import { multinomialDependencies, invDependencies, combinationsDependencies, create } from "mathjs";const { multiply, inv, combinations } = create({ multinomialDependencies, invDependencies, combinationsDependencies});multiply(inv(a), b)
これでビルドしてみるとバンドルサイズは次のようになった。
右上のファイルの中にこぢんまりと収まっているのがMath.jsのモジュール。
バンドルサイズは約200kbなので3分の1まで削減できた。
Math.jsには他にも便利な機能があるので活用していきたい。