SynState のために
synstate-dom は SynState のランタイムに最も直接つながる UI ライブラリです。グラフは途中で何も変換されずに DOM で終わります。SynState のベンチマークの概要では、SynState はどのシナリオでも最速のライブラリの 2.7 倍以内に収まります。すべてのシナリオで計測したライブラリのうち、最悪のケースでも1桁倍に収まるのは SynState だけです。
SynState のために
synstate-dom は SynState のランタイムに最も直接つながる UI ライブラリです。グラフは途中で何も変換されずに DOM で終わります。SynState のベンチマークの概要では、SynState はどのシナリオでも最速のライブラリの 2.7 倍以内に収まります。すべてのシナリオで計測したライブラリのうち、最悪のケースでも1桁倍に収まるのは SynState だけです。
シンプルで、遅くなりにくい
1 つのことに 1 つの書き方を保ち、ベンチマークの 1 行だけで勝つための書き方は増やしません。js-framework-benchmark の操作では、最も遅い操作でも最速のライブラリの 1.56 倍で、Solid・Preact・Preact + Signals には及びませんが、React の 3.79 倍を大きく下回ります。
細粒度、呼ぶのは 1 回だけ
コンポーネント関数が呼ばれるのはマウント時の 1 回だけです。更新は synstate のグラフを伝わって、束縛された DOM の葉(属性・プロパティ・テキストノード)に直接書き込まれます。
コンパイラ不要
TypeScript 標準の "jsx": "react-jsx" と jsxImportSource
だけで動きます。Babel や Vite のプラグインを設定する必要はありません。
リアクティブかどうかが型でわかる
データを受け取るスロットに渡せるのは Observable か constant(...)
だけで、素の値は渡せません。うっかりスナップショットを読んで渡しても、更新されないビューができあがるのではなく、型エラーになります。props
も値を読み出したものではなく Bindable
そのものなので、分割代入しても、デフォルト値を付けても壊れません。
そもそもリークしない作り
If・Match・For
は、表示するものをそれぞれのスコープでマウントします。分岐を閉じたり行を消したりすると、その中で作った派生と購読はすべて破棄されます。