bouzuya.hatenablog.com

ぼうずやのにっき

bouzuya/tamaru では halogen の server-side rendering を諦める

bouzuya/tamaru 。 halogen で server-side rendering を諦めたほうが良いかもしれない……。 Halogen.VDom.DriverrunUI を触っていたときにそんな気はしていて、見ないようにしてきたんだけど。今日ついにそこに到達した。

今日は client-side の entry point を見ていた。試してみたところ server-side での結果を再利用できそうにない。

Halogen.VDom.DriverrunUI は↓を見れば分かるけど void $ DOM.appendChild node (DOM.htmlElementToNode container) している。最初に DOM へ反映させるとき、指定した container へ組み立てた要素を appendChild するだけ。

https://github.com/slamdata/purescript-halogen/blob/923c5a4d3f46d17c5abf888647179c482e3465d4/src/Halogen/VDom/Driver.purs#L127

何を気にしているのかというと、既存の DOM を考慮してくれないということ。 React で言うところの hydrate 的なアレがなさそう、ということ。これをなんとかするのは骨が折れそうだ。 server でつくった状態へと halogen-vdom の machine を持っていけると良いのだけど、 Halogen.VDom.DriverrunUI にはそういう口がない。おそらく Halogen.VDom.Driver モジュールを作り直すことになるだろう。せっかく 2018-06-11 によって回避できた 2018-06-09 の問題が再燃する。

もう tamaru では……、せっかく HTML をつくれるところまではやったけど……、諦めて container の子を remove してしまおうかと思っている。次のプロジェクトでなんとかするか、あるいは halogen を捨ててしまうか……。それはまだ分からない。 bouzuya/fwt では Component -> String さえできなかったが、 tamaru ではできた。次はさらに進めるかもしれない。