2018-06-14 bouzuya/tamaru では halogen の server-side rendering を諦める
bouzuya/tamaru 。 halogen で server-side rendering を諦めたほうが良いかもしれない……。 Halogen.VDom.Driver
の runUI
を触っていたときにそんな気はしていて、見ないようにしてきたんだけど。今日ついにそこに到達した。
今日は client-side の entry point を見ていた。試してみたところ server-side での結果を再利用できそうにない。
Halogen.VDom.Driver
の runUI
は↓を見れば分かるけど void $ DOM.appendChild node (DOM.htmlElementToNode container)
している。最初に DOM へ反映させるとき、指定した container
へ組み立てた要素を appendChild
するだけ。
何を気にしているのかというと、既存の DOM を考慮してくれないということ。 React で言うところの hydrate
的なアレがなさそう、ということ。これをなんとかするのは骨が折れそうだ。 server でつくった状態へと halogen-vdom の machine を持っていけると良いのだけど、 Halogen.VDom.Driver
の runUI
にはそういう口がない。おそらく Halogen.VDom.Driver
モジュールを作り直すことになるだろう。せっかく 2018-06-11 によって回避できた 2018-06-09 の問題が再燃する。
もう tamaru では……、せっかく HTML をつくれるところまではやったけど……、諦めて container
の子を remove してしまおうかと思っている。次のプロジェクトでなんとかするか、あるいは halogen を捨ててしまうか……。それはまだ分からない。 bouzuya/fwt では Component -> String さえできなかったが、 tamaru ではできた。次はさらに進めるかもしれない。