使用ソフトウェア | バージョン | 備考 |
---|---|---|
Gatsby | 4.14.1 | |
React | 18.0.0 | |
Preact | 10.7.3 |
Google Search Console
にて謎技研のモバイル向けサイトのスコアが芳しくない。
特にLCP(Largest Contentful Paint)
のスコアが悪い。
今回はPreact
を入れてLighthouse
のスコアが上がるかテストすることにした。
先に結論を書いておくとPreactの利用は見送ることにした。
これはReact
本家のReact.Lazy
により良いスコアが出るためだと考えている。
Gatsby
系のサイトを軽量化する記事を英語で検索すると、それなりにこのプラグインを入れているサイトを目にする。
Preact
はとにかくReact
を軽量にしたようなモノとしか知らないので詳しい話は別サイトに譲る。
本家React
と完全に同じように扱えるか?というとそうでもないらしく結構導入が大変だという噂も耳にする。
しかし!Gatsby.js
にはPreact
を簡単に扱うライブラリがあるのでサクッと試せるのでは?と考えた。
詳しく調査したわけではないのだが、次のサイトによるとPreact
に実装されていない機能を呼び出そうとしたときにはReact
が使われるとの情報あり。
How To Make Your Gatsby App Smaller, Using Preact | JavaScript in Plain English
ただし、後述するが残念ながら私のケースでは動かないケースがあったので解決法を記してある。
それでも動かなければアンインストールすれば良いので試すのは気軽。
Gatsby
サイトならgatsby-plugin-preact
をインストールしてプラグインに記述するだけでOK。
npm install gatsby-plugin-preact preact preact-render-to-string
本番環境とローカル環境の両方でLighthouse
のスコアを取ってみることにする。
ローカル環境は一旦Build
した後serve
を使って仮サーバーを立てる。
またいつも通りブラウザはChrome
からシークレットモード(無駄なプラグインがオフになる)で計測
次のフォーラムによるとReact.Lazy
とReact.Suspense
のコードが入っていると動かなくなる。
解決方法はないらしいので、こちらのコードを使用しないように対応した。
ローカルで計測
本番環境で計測
本番のほうがLCP
が良いのは謎
ローカルで計測
本番環境で計測
本番環境ではトータルのスコアが落ちてしまった。
尚、この実験はPreact
前のコードにReact.Lazy
が入っており、このコードのお陰で多少のスコアアップがある。
そしてPreact
後はこのLazy
を排除したのでその分不利となったのが結果につながったと思われる。
Total Blocking Time
だけスコアが低くなっているのはこのせいだろう。
Preact
では使えないReact.Lazy
のおかげで本家React
版のほうがスコアが良いという結果だと思われるが...ひとつ注意点がある。
React.Lazy
はなんでもかんでも使えばいいというわけではなくむしろスコアダウンを招くので注意してもらいたい。
これは実際に実験した結果なのだが、毎回必ず読み込まれる広告部分や、非表示のドロワ部分(モバイル版)のような箇所にReact.Lazy
を当てた所スコアが落ちる結果となった。
唯一スコアアップが見込めたのはGoogleのサイト内検索バーだけである。
広告のようなタイプのものは視覚に影響する(大きなスペースを描画している)ため、こちらのロードを遅延させてしまうとユーザーの使用感に影響するという評価なのではないだろうか。
今回の結果を踏まえ当サイトではPreact
の利用は見送ることにした。
またPreact
を利用する場合はサイトそのものが動かなくなる可能性があるのでそもそもおすすめできるものではない。
とは言えGatsby.js
の場合インストール/アンインストールが手軽にできるので、サイトが重くなりがちなら試して見る価値はある。