MathJaxのバージョンv3.0.0では何が新しくなったのか?レビュー

2019-10-28 12:542019-11-27 17:41

MathJaxのv3.0の、何が新しいのか?が次のページにのっています。

What's New in MathJax v3.0

アップデートされたMathJaxで何が良くなった何が出来るようになったなんかについて駄文を連ねていく。

v3はv2までの完全なリライト

メジャーバージョンアップデートということでコードが完全に書き直されている。v2がどうだったのかは知らないがv3ではTypeScriptが基本的なソースコードとして使われている点で今風だ。v3の目標はコードをリライトする中でMathJaxの構造をより最近のWeb技術に適応させることだった。

なお、リライトによって従来のv2とconfigの記述方法に互換性は無くなっている。いちおうconfiguration convertion toolが公開されているが、単純にCDNの場合アドレスを書き換えるだけで即使えるという訳には行かないようだ。

数式レンダリングにかかる時間が60-80%ほどに短縮

なんの数式をレンダリングするか、設定、ブラウザの挙動なんかにもよるがだいたいこれくらいのスピードアップに成功したらしい。スピードアップは、細かいリファクタどうこうと違って使う人見る人あらゆるエンドユーザに影響する最も嬉しい機能向上だといえる。この事実だけで即刻v2からv3に移行すべきと言える。よくMathJaxのページを開く人ならわかると思うがレンダリングのスピードの速い遅いは以前から人間の知覚でわかるレベルだった、つまり元が結構遅いのでこの改善は非常にクリティカルだと思う。

大きなシステムの1部として使える柔軟性

これは使う側におけるメリットといえる。内部の処理をより細かい単位で呼び出せるようにする、などの仕様変更によって、より大きなシステムの1部として機能させることが可能となった。例えば、数式レンダリングのプロセスをmath部分の検出、MathMLなどへのコンパイル、メトリックデータの取得、指定された出力フォーマットへの変換、ページへの挿入、各段階におけるイベントの起動などに分解、オープンとすることでそれらを調整したりオーバライドしたりすることができる。らしい。

同期処理による数式変換ができる

Tex表現をSVGテキストに変換する、などの機能をMathJaxによる同期処理で呼び出せるようになった。バージョン2では非同期処理しか根本的に無理だったのでこれはv3に大きな変更だという。

非同期処理のパラダイムシフトが行われた

同期処理による変換は導入されたものの依然としてユーザが望むならMathJaxは非同期処理をサポートしている。しかし依然と違って標準的でないjavascriptパラダイムである非同期処理が書き直されている。ようはMathJax限定のオレオレ非同期処理だったものをきちんとしたマナーに従った形式にリライトしたということだろう。そのマナーのことはES6 promiseといわれるらしいが詳しくは知らん。これによって他のjavascript機能とシームレスに結び付けれられる。

パッケージ管理がサポートされた

前まで、v2では全てのコンポーネントをパッケージとして1つにまとめる機能が無かった。それに対してv3ではソースコードからビルド済パッケージなどをnpmなどから簡単にダウンロードできるようになった。最近のこのてのWebライブラリはたいがいこれが出来るので、当初のリライトの目的通り今風のWeb技術に近づけることに成功している。

真面目にサーバサイド機能をサポートした

v2から一応MathJax-nodeなるものはあってパッと見サポートしている感があって実は全く意図した使い方は出来なかったものを、ちゃんと真面目に使える用にした。あまり見ていないがこれによってオンプレミスでサーバーサイドでプリプロセスしたTex表現を含むWebページを吐き出せるのだとしたら嬉しい。ブラウザがMathJaxを処理するのと本質的に同じ方法でサーバサイドでも同じようにMathJaxを扱えるようになったとは書いてある。いかがなんだろうか。

TypeScript使った、その他

これは普通にTypeScriptのメリットと被るかんじになりそうなので省略。TypeScript使ったんやってほんまに。あとは普通にコンポーネントの拡充や、設定方法の拡張、特にstartupの挙動を制御できるようになったことなど。TeXの表現が増えた、SVG出力が改善された、なんかのマイナーな拡張も着実になされている。

所感

とにかく早くアップデートしたほうがお得だよね。(レビューしてる部分ここだけやん。少な)