BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース markdown-wasm:WebAssemblyで記述された非常に高速なMarkdownパーサー

markdown-wasm:WebAssemblyで記述された非常に高速なMarkdownパーサー

原文(投稿日:2020/10/21)へのリンク

Rasmus Andersson氏は、CからWebAssemblyに移植された非常に高速なMarkdownパーサーであるmarkdown-wasmをリリースした。markdown-wasmは、あるベンチマークで最速であったJavaScriptのMarkdownパーサーの2倍の速度である。markdown-wasmのサイズは小さいままである(gzip圧縮で31KB)。

CommonMark仕様をカバーする一連のサンプルMarkdownファイルに対してmarkdown-wasmおよびその他の一般的なMarkdownパーサー(たとえば、markdown-itcommonmarkmarkedshowdown)を実行するベンチマークでは、markdown-wasmはサンプルファイルをmarkdown-itの2倍の速度でパースする。次に速い競合は下記の通りである。

markdown-wasm average operations per seconds
(1秒あたりの平均操作数。出典: markdown-wasm GitHub

ベンチマークされた他のパーサーよりも一貫して高速であるため、このような結果のようである。

markdown-wasm min-max parse time
(最小-最大パース時間、対数スケール。出典: markdown-wasm GitHub

markdown-wasmは、CommonMark仕様に準拠するCで記述されたMarkdownパーサーであるMD4CCのマークダウン)を活用している。markdown-wasmはMD4Cを、CおよびC++ WASM/JSプロジェクトのコンパイル、リンク、パッケージ化を処理するwasmcユーティリティと共にWebAssemblyに移植している。markdown-wasmには依存関係がない。

markdown-wasmは、Markdownコンテンツ(JavaScript文字列またはUTF8でエンコードされたデータ)を取得してHTML(JavaScript文字列またはUint8Arrayとして返される)に変換する単一のparse APIを公開している。markdown-wasmは、Node.jsやブラウザーで使用することができ、wasmcを使用してソースから構築することができる。

計算は、より少ない作業(より効率的なアルゴリズムとデータ構造を介して)、並行して作業を行う(マルチコアアーキテクチャを活用する)、または単に作業をより速く行う(たとえば、コンパイルとインタープリター、AOTコンパイルとJITコンパイル)ことにより、より速く実行できる。パフォーマンスが重要な場合、開発者は多くの場合、複数の計算コア(Rust、Go、Cなど)でソースコードを効率的にコンパイルおよび実行するように設計された言語を使用する。markdown-wasmはソフトウェアの成長トレンドに乗っており、開発者はパフォーマンスのためにコンパイル時にネイティブに変換する言語で開発する。最終的にWebAssemblyに移植して、ソフトウェアをさまざまなターゲット環境とランタイム(ブラウザーなど)で実行できるようになる。

ただし、パフォーマンスが常に重要であるとは限らない。markdown-itパーサーは、たとえばJavaScriptプラグインで簡単に拡張できる。このような拡張性は、コミュニティの貢献とプラグインのエコシステムの成長を促進する。

開発者は、専用の試用環境のおかげでmarkdown-wasmを試すことができる。markdown-wasmは数学表記($x_0$など)をサポートする必要があるが、試用環境ではサポートしていない。markdown-wasmは、CommonMark Markdownフレーバーで指定されたすべての機能と追加の拡張機能をサポートする。

markdown-wasmは、ブラウザで次のように使用できる。

<script src="markdown.js"></script>
<script>
window["markdown"].ready.then(markdown => {
  console.log(markdown.parse("# hello\n*world*"))
})
</script>

markdown-wasmはNode.jsで次のように使用できる。

const  markdown  =  require("./dist/markdown.node.js") 
console.log(markdown.parse("# hello\n*world*"))

markdown-wasmは、MITライセンスの下でオープンソースソフトウェアである。

この記事に星をつける

おすすめ度
スタイル

BT