VirtualDom

Virtual DOM 2015夏

More than 3 years have passed since last update.

そろそろ夏も終わりなのか、ふと思い出したのでVirtual DOMのベンチマークを見に行ってきました。

ベンチマークボタンをポチポチ押してみた感想文。動かしてはいない。

Virtual DOM Benchmark

この間見た時は、uix/Dartがいい線行ってると思ったら、フレームワークの数が倍ぐらいに増えていて、完全に置いてけぼりにされていた。

現在は、InfernoJSが全体的に良いスコアを出していて、最速と言える。

InfernoJSはテンプレートが分離されていて、t7.jsを使っている。

t7.jsは、React、Mithril、Universal互換のインターフェースも用意している。

Universalを使えば他のライブラリでも使えるようで、ラッパーを書けば簡単にDartから利用できるかもしれない。

全体的にパフォーマンスの出ていないフレームワークでも、ある項目では桁違いな数字を叩き出しているフレームワークがある。

例えば、Dekuの["removeLast(500)"] update()

ちゃんと動いてるのか、インチキしているのか、他を投げ捨てているだけなのか、実装を比較してみると面白そう。

Virtual_DOM_Benchmark_and_Virtual_DOM_2015夏.png

UI Benchmark

新しいベンチマークが新設されてた。

凝視していると発作を起こしそうなので、控えめに見よう。っていうか見なくて良い。

まだ各フレームワークが出揃っていない。


  1. t7.jsをReact、Mithrilに突っ込んでみて、どのくらい改善するか測定する。

  2. t7.jsのDartラッパーができたら、uixに突っ込んでどのくらい改善するか測定する。

というのが、うまい具合にいくといいなあ。

(1は、誰かやってくれるといいなあ。)

追記1

uixの作者 Boris Kaul氏によると


  • JS実装をDartでラップすると、DartのJsObjectでのオーバーヘッドが大きくなってしまう。
    詳しくは、react-dartで。

  • t7.jsのベンチマークスコアはcacheの影響が大きいらしい。(えー)このcache機能は暗黙的でOFFにはできないようだ。

ということで、uixにはt7.jsは来ない。

t7.jsを使っているInfernoJSを除くと、cito.js、vidomあたりが最速になってくる。

vidomは、ブラウザによってパフォーマンスに開きがある。


Vidom is 15x faster in Chrome, 10x faster in Firefox and 2x faster in IE than React.


Mobile SafariとChromeを優先してくれるとありがたいかなー。

この辺りの成果がuixに反映されると期待して、

ぜひ次回はAngular2のレンダリングにuixを使うターンに行ってみたい。

追記2

Boris Kaul氏にuixのロードマップを尋ねてみたが、今後は大きな変更は入らないかもしれない。という感触。

メモリサイズとGCを抑える・モバイルブラウザに配慮した、Virtual DOMのGoogle実装が作業中であることを知る。

Dart portingもあった。コミッタはGooglerでdart-langの中の人。

次回、Incremental DOMのベンチマークを取るターン。(だれか。)