Web備忘録

雑多に書いています

「Webフロントエンド ハイパフォーマンスチューニング」を読んだ。

2章 レンダリングのしくみ

ブラウザは、以下のようなレンダリングエンジンとJavaScriptエンジンを用いてレンダリングを行う。

(引用: 久保田 光則. Webフロントエンド ハイパフォーマンス チューニング (Japanese Edition) (Kindle の位置No.589). Kindle 版 より)

レンダリングの流れはLoading, Scripting, Rendering, Painting である。(ローディング、スクリプティングレンダリング、ペインティング)

Loading フェイズ

HTML, CSS, JavaScriptファイルや、Jpeg, SVG, PNGなどの画像ファイルを読み込む。

Scripting フェイズ

JavaScirptコードのトークン列をパースし、コンパイルしたあとコードを実行する。

Renderingフェイズ

スタイルの計算を行なったあと、要素の大きさやパッディング、マージン、位置などを決定する。

Paintフェイズ

内部の低レベルな2Dグラフィック向けの命令を行なったあと、その命令に基づきz軸の存在するレイヤーという単位で1枚ごとに生成する。最終的にそのレイヤーを合成し、レンダリング結果を生成する。

「再レンダリング」するときに、以上の一連の流れを再び必ず行うというわけではなく、状況に応じて内部表現のオブジェクトをなるべく再利用する。ただし、どの程度再利用するかは、場合によって異なる。

DOMContentLoaded vs load - HTML DOM

3章 チューニングの基礎

推測するな、計測せよ。(UNIX格言)

RAILというパフォーマンスモデルがあり、ウェブアプリケーションやハイブリッドアプリに対するパフォーマンスの指標として利用できる。

パフォーマンス指標 RAIL

  • Response(応答) 基準時間: 100ms
    • ユーザーの何らかのアクションに対して応答するまでの時間。
  • Animation(アニメーション) 基準時間: 16ms
    • アニメーションの1フレーム処理の時間(16ms以下だと60FPSを実現できる)
  • Idle(アイドル処理) 基準時間: 50ms
    • アイドル状態(何らかのユーザーのアクションを待っている状態)のJavaScriptの処理時間
    • Responseとあわせて150ms以下で実際のUI上の応答があることになる。
  • Load(読み込み) 基準時間: 1000ms
    • コンテンツ読み込みにかかる時間

計測する手段

  • Chrome DevTools
  • JavaScriptによる計測
  • パフォーマンス診断ツールの利用

    • Chrome Devtools の Light House
      Light House
  • パフォーマンスの継続的監視

4章 リソース読み込みのチューニング - 9章 認知的チューニング

Next.js使ってるとどれが使えるかすぐわからないので、深くは追求せず。