Mercado Libre がウェブに関する指標に合わせて最適化した方法(TBT/FID)

商品詳細ページのインタラクティビティを最適化し、Lighthouse の最大潜在的な FID を 90% 削減し、Chrome ユーザー エクスペリエンス レポートの FID を 9% 改善しました。

Carlos Aranha
Carlos Aranha
Joan Baca
Joan Baca

Mercado Libre は、ラテンアメリカ最大の e コマースと決済エコシステムです。18 か国に展開しており、ブラジル、メキシコ、アルゼンチンでは市場リーダーとなっています(ユニーク ビジター数とページビュー数に基づく)。

ウェブ パフォーマンスは長い間同社の重点事項でしたが、最近、パフォーマンスをモニタリングし、サイトのさまざまな部分に最適化を適用するチームを結成しました。

この記事では、Mercado Libre のフロントエンド アーキテクチャ チームの Guille PazPablo CarminattiOleh Burkhay が、Core Web Vitals の 1 つである ファースト インプット ディレイ(FID)とそのラボ プロキシである 合計ブロック時間(TBT)を最適化するために行った作業について説明します。

90%

Lighthouse の最大推定 FID の減少

9%

CrUX で FID を「速い」と認識するユーザーが増えている

長時間のタスク、初回入力遅延、合計ブロック時間

負荷の高い JavaScript コードを実行すると、長時間のタスクが発生する可能性があります。長時間のタスクとは、ブラウザのメインスレッドで 50 ミリ秒を超えて実行されるタスクです。

FID(初回入力遅延)は、ユーザーがページを最初に操作したとき(リンクをクリックしたときなど)から、ブラウザがその操作に応答してイベント ハンドラの処理を実際に開始できるまでの時間を測定します。負荷の高い JavaScript コードを実行するサイトには、長いタスクが複数存在する可能性があり、最終的に FID に悪影響を及ぼします。

優れたユーザー エクスペリエンスを提供するには、サイトで First Input Delay を 100 ミリ秒未満に収めるようにします。 良好な fid 値は 2.5 秒、低速な値は 4.0 秒を超え、その間の値は改善が必要です

Mercado Libre のサイトはほとんどのセクションで良好なパフォーマンスを示していましたが、Chrome ユーザー エクスペリエンス レポートで、商品の詳細ページの FID が低いことがわかりました。この情報に基づいて、同社はサイトの商品ページのインタラクティビティの改善に注力することにしました。

Mercado Libre 商品の詳細ページのモバイル版とデスクトップ版。
Mercado Libre の商品の詳細ページのモバイルとパソコンのバージョン。

これらのページでは、ユーザーが複雑な操作を行えるため、有用な機能を妨げることなくインタラクティビティを最適化することが目標でした。

商品の詳細ページのインタラクティビティを測定する

FID は実際のユーザーを必要とするため、ラボで測定することはできません。ただし、Total Blocking Time(TBT) 指標はラボで測定可能で、現場の FID とよく相関し、インタラクティビティに影響する問題もキャプチャします。

たとえば、次のトレースでは、メインスレッドでタスクの実行に費やされた合計時間は 560 ミリ秒ですが、そのうちの 345 ミリ秒のみが合計ブロック時間(50 ミリ秒を超える各タスクの部分の合計)と見なされます。

ブロック時間を示すメインスレッドのタスクのタイムライン

Mercado Libre は、実際の環境で商品詳細ページのインタラクティビティを測定して改善するために、TBT をラボで代替指標として使用しました。

一般的なアプローチは次のとおりです。

WebPageTest を使用して長時間のタスクを可視化する

WebPageTest(WPT)は、世界中のさまざまなロケーションにある実際のデバイスでテストを実行できるウェブ パフォーマンス ツールです。

Mercado Libre は WPT を使用して、実際のユーザーに近いデバイスタイプとロケーションを選択することで、ユーザー エクスペリエンスを再現しました。具体的には、メキシコの Mercado Libre ユーザーのエクスペリエンスに近づけるため、Moto 4G デバイスバージニア州ダレスを選択しました。Mercado Libre は、WPT のメインスレッド ビューを監視して、メインスレッドを 2 秒間ブロックする長いタスクが連続して発生していることを発見しました。

Mercado Libre の商品の詳細ページのメインスレッド ビュー。
Mercado Libre の商品の詳細ページのメインスレッド ビュー。

対応するウォーターフォールを分析したところ、2 秒の大部分がアナリティクス モジュールから発生していることがわかりました。アプリのメインのバンドルサイズが大きく(950 KB)、解析、コンパイル、実行に時間がかかっていました。

商品の詳細ページのウォーターフォール ビュー。
Mercado Libre の商品の詳細ページのウォーターフォール ビュー。

Lighthouse を使用して最大推定 FID を特定する

Lighthouse では、さまざまなデバイスやロケーションを選択することはできませんが、サイトの診断やパフォーマンスに関する推奨事項の取得に非常に役立つツールです。

Mercado Libre が商品の詳細ページで Lighthouse を実行したところ、最大潜在 FID が唯一赤色でマークされ、値は 1,710 ミリ秒でした。

Mercado Libre の商品詳細ページの PSI レポートの Lighthouse 指標。

Mercado Libre は、これらの改善が実際のユーザーに影響し、Chrome ユーザー エクスペリエンス レポートなどの実際のユーザー モニタリング ツールに反映されると想定して、Lighthouse や WebPageTest などのラボツールで最大潜在 FID スコアを改善することを目標に設定しました。

長時間実行タスクを最適化する

最初のイテレーション

Mercado Libre は、メインスレッド トレースに基づいて、コストの高いコードを実行している 2 つのモジュールを最適化することを目標に設定しました。

内部トラッキング モジュールのパフォーマンスの最適化を開始しました。このモジュールには、モジュールの動作に不可欠ではなく、安全に削除できる CPU 使用率の高いタスクが含まれていました。これにより、サイト全体の JavaScript が 2% 削減されました。

その後、一般的なバンドルのサイズを改善する作業を開始しました。

Mercado Libre は webpack-bundle-analyzer を使用して、最適化の機会を検出しました。

また、次の Babel 最適化も適用しました。

これらの最適化の結果、バンドルのサイズは 約 16% 削減されました。

効果を測定する

この変更により、Mercado Libre の連続する長いタスクが2 秒から 1 秒に短縮されました。

最初の最適化後の Mercado Libre の商品詳細ページのメインスレッド ビュー。
WPT の上部ウォーターフォールには、3 秒目と 5 秒目の間([ページがインタラクティブ] 行)に長い赤いバーがあります。下部のウォーターフォールでは、バーが細かく分割され、メインスレッドを占有する時間が短縮されています。

Lighthouse では、初回入力遅延の最大推定時間が57% 短縮されました。

最初の最適化後の Mercado Libre の商品詳細ページの PSI レポートの Lighthouse 指標。

2 回目のイテレーション

チームは、その後の改善を見つけるために、長いタスクの調査を続けました。

最初の最適化後の Mercado Libre の商品詳細ページのメインスレッド ビューの詳細ビュー。
ウォーターフォール(画像なし)により、Mercado Libre はメインスレッドを大量に使用しているライブラリ([ブラウザのメインスレッド] 行)を特定できました。[ページがインタラクティブ] 行は、このメインスレッド アクティビティがインタラクティビティをブロックしていることを明確に示しています。

これらの情報に基づいて、Google は以下の変更を実施することにしました。

  • メイン バンドルのサイズをさらに削減して、コンパイル時間と解析時間を最適化します(たとえば、さまざまなモジュールにわたる重複する依存関係を削除します)。
  • コンポーネントレベルでコード分割を適用して、JavaScript を小さなチャンクに分割し、さまざまなコンポーネントをよりスマートに読み込むことができます。
  • コンポーネントの水分補給を遅らせて、メインスレッドをよりスマートに使用できるようにします。この手法は、一般に部分的な水分補給と呼ばれます。

効果を測定する

生成された WebPageTest トレースでは、さらに小さな JavaScript 実行チャンクが示されました。

2 回目の最適化後の Mercado Libre の商品詳細ページのメインスレッド ビュー。

Lighthouse の最大推定 FID 時間はさらに 60% 短縮されました。

最初の最適化後の Mercado Libre の商品詳細ページの PSI レポートの Lighthouse 指標。

実際のユーザーの進捗状況を可視化する

WebPageTest や Lighthouse などのラボ テストツールは、開発中のソリューションの反復処理に適していますが、真の目標は実際のユーザーのエクスペリエンスを改善することです。

Chrome ユーザー エクスペリエンス レポートは、Chrome ユーザーがウェブ上の人気ページに実際にアクセスしたときのユーザー エクスペリエンスを指標化したものです。レポートのデータは、BigQueryPageSpeedInsightsCrUX API でクエリを実行することで取得できます。

CrUX ダッシュボードを使用すると、コア指標の進捗状況を簡単に可視化できます。

.
Mercado Libre の FID の進捗状況(2020 年 1 月~ 2020 年 4 月)。最適化プロジェクトの開始前は、82% のユーザーが FID を高速(100 ミリ秒未満)と認識していました。その後、91% 以上のユーザーが指標を高速と認識しています。

次のステップ

ウェブのパフォーマンスは決して完了することはありません。Mercado Libre は、こうした最適化がユーザーにもたらす価値を理解しています。商品リスティング ページでのprefetching、画像の最適化など、サイト全体で複数の最適化を継続的に適用しながら、商品リスティング ページの改善を継続し、合計ブロック時間(TBT)と、プロキシ FID をさらに削減しています。このような最適化には次のものがあります。

  • コード分割ソリューションの反復処理。
  • サードパーティ スクリプトの実行を改善しました。
  • バンドルレベル(webpack)でのアセット バンドルの継続的な改善。

Mercado Libre はパフォーマンスを包括的に把握しているため、サイトのインタラクティビティの最適化を継続しながら、現在の他の 2 つのCore Web VitalsLCP(Largest Contentful Paint)CLS(Cumulative Layout Shift))の改善の余地をさらに評価し始めています。