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 が、ウェブに関する主な指標の一つである First Input Delay(FID) とそのラボプロキシである Total Blocking Time(TBT)を最適化するために行った作業の概要を説明します。

90%

Lighthouse での FID の最大値の減少率

9%

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

長時間のタスク、First Input Delay、Total Blocking Time

高コストの JavaScript コードを実行すると、長時間のタスク(ブラウザのメインスレッドで 50 ミリ秒以上実行されるタスク)が発生する可能性があります。

FID(First Input Delay)は、ユーザーが最初にページを操作してから(たとえば、リンクをクリック)、ブラウザがその操作に応じてイベント ハンドラの処理を実際に開始できるまでの時間を測定します。高コストな JavaScript コードを実行するサイトでは長時間のタスクがいくつか発生する可能性があり、FID に悪影響を及ぼすことになります。

優れたユーザー エクスペリエンスを提供するため、サイトは初回入力遅延を 100 ミリ秒未満にする必要があります。 良い fid 値は 2.5 秒、悪い値は 4.0 秒を超え、その間はすべて改善が必要

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

Mercado Libre の商品詳細ページのモバイル版と PC 版。
Mercado Libre の商品詳細ページのモバイル版とパソコン版。

ユーザーはこのページを使用して複雑な操作を行えるため、重要な機能を妨げずにインタラクティビティを最適化することでした。

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

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

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

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

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 を実行したところ、赤色でマークされた指標は [Max Potential FID] のみで、値が 1,710 ミリ秒であることが判明しました。

Mercado Libre の商品詳細ページに関する PSI レポート内の Lighthouse の指標。

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

時間のかかるタスクを最適化する

1 回目の反復

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

そこで同社は、内部トラッキング モジュールのパフォーマンスの最適化を開始しました。このモジュールには、モジュールの動作に重要ではない CPU 負荷の高いタスクが含まれていたため、安全に削除できました。これにより、サイト全体の JavaScript が 2% 削減されました。

その後、一般的なバンドルサイズの改善に取り組み始めました。

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

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

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

効果の測定

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

最初の最適化を実施した後の Mercado Libre の商品詳細ページのメインスレッド ビュー。
WPT の上部にあるウォーターフォールの 3 秒と 5 秒の間に、長い赤いバー([Page is Interactive] 行)が表示されます。下部のウォーターフォールでは、バーが小さな断片に分割され、メインスレッドを占有する時間が短くなっています。

Lighthouse の結果、初回入力遅延の最大許容値が 57% 短縮されました。

最初の最適化を実施した後の Mercado Libre の商品詳細ページに関する PSI レポート内の Lighthouse の指標。

2 回目の反復

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

最初の最適化を実施した後の Mercado Libre の商品詳細ページのメインスレッド ビューの詳細ビュー。
ウォーターフォール(図には含まれていません)により、Mercado Libre はメインスレッドを頻繁に使用しているライブラリを特定できました([Browser Main Thread] 行)。[Page is Interactive] 行を見ると、このメインスレッド アクティビティがインタラクティビティをブロックしていることがわかります。

この情報に基づいて、同社は以下の変更を実施することを決定しました。

  • 引き続きメインバンドルのサイズを縮小し、コンパイルと解析の時間を最適化します(異なるモジュール間で重複する依存関係を削除するなど)。
  • コンポーネント レベルでコード分割を適用して、JavaScript を小さなチャンクに分割し、さまざまなコンポーネントをスマートに読み込めるようにします。
  • コンポーネントのハイドレーションを延期して、メインスレッドをスマートに使用できるようにします。この手法は、一般に部分ハイドレーションと呼ばれます。

効果の測定

結果の WebPageTest トレースでは、JS の実行のさらに小さなチャンクが示されていました。

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

また、Lighthouse での FID の最大可能時間がさらに 60% 短縮されました。

最初の最適化を実施した後の Mercado Libre の商品詳細ページに関する PSI レポート内の Lighthouse の指標。

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

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

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

CrUX ダッシュボードでは、主要な指標の進行状況を簡単に可視化できます。

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

次のステップ

ウェブ パフォーマンスは、完成された作業ではありません。Mercado Libre は、こうした最適化がユーザーにもたらす価値を理解しています。商品リストページのプリフェッチや画像の最適化など、サイト全体にいくつかの最適化を引き続き適用しながら、合計ブロック時間(TBT)の短縮やプロキシ FID によるさらなる改善を商品リストページに加え続けています。たとえば、次のような最適化を行います。

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

Mercado Libre は、パフォーマンスの全体像を把握しているため、サイトでのインタラクティビティの最適化を継続すると同時に、他の 2 つの現在の Core Web VitalsLCP(Largest Contentful Paint)CLS(Cumulative Layout Shift)の改善点の評価も開始しています。