UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Qwik】ざっくりQwikとは?

QwikというReactに似た書き方で開発できるMPAフレームワークのお話を聞いたので自分でも調べてみる

qwik.builder.io

この前読んだJackさんの記事でもそうだが、いまのSPAには色々課題がある

NavigationAPIはその課題の解決策の一つであるが   uga-box.hatenablog.com

そもそもなんでもかんでもSPAにするなという記事もあったりして、今後もMPA(従来のページ遷移)を採用する可能性は十分ある

lealog.hateblo.jp

ただ、MPAにはもともとの問題(サーバーサイドテンプレートとの二重開発など)があったりするので、こっちはこっちで解決しなければならない

そんな中、MPAであるがテンプレートもイベントハンドラJavaScriptでやるという思想のフレームワークが登場してきているみたい

Qwikそのうちの一つ

vs ハイドレーション

いまのReact SSRにおけるハイドレーションはレンダリングが2回(SSR時とCSR時の2回)やることになるので無駄が多い

レンダリングを2回やらなければならない主な理由はイベントハンドラの復元で、SSRしたときではイベントハンドラが実行できないので、実行できるようにするためCSRが必要になる

これをしないようにするのがQwikのモチベーション

ソリューション

これを解決するため、イベントハンドラの状態をSSR時にHTMLにシリアライズしておいて、クライアントサイドでデシリアライズして復元しようというのがQwikのソリューションとのこと

シリアライズについて ↓

https://qwik.builder.io/guide/serialization/overview

具体的に一番わかりやすいのがJSON.stringifyだが、これだけではできないことがあるので、そこをQwikが補う

例えば

  • DOM references
  • Dates (not yet implemented)
  • Function closures (if wrapped in QRL).

ただ、Qwikでもできないことがあるので、そこを理解しながら開発するのが必要とのこと

例えば以下のことは解決できないと書いてある

  • Serialization of classes (instanceof and prototype)
  • Serialization of Promises, Streams, etc...

あとは、イベントに必要なJavaScriptのダウンロードをイベントが実行されるまで遅らせる(Fine-grained Lazy-Loading)などの仕組みがあるみたい

聞いたお話によると、イベント発生からイベント実行までが環境によっては遅いかもとのことで、まだまだ改善の余地がありそう

SPAの課題は感じているので、MPAフレームワークを今後も注目していきたい