このケーススタディでは、INP のデバッグと改善のワークフローを詳細に説明します。
Trendyol が使用している React で、PageSpeed などの Google ツールを活用している
Insights(PSI)、Chrome DevTools、scheduler.yield
API があります。
e コマースサイトを構成する 2 つの重要な要素は商品リスティング ページです 商品の詳細ページ(PDP)です。e コマースのトラフィックの多くは 商品リスティング ページ(メール キャンペーン、ソーシャル メディア、 表示されなくなります。そのため、PLP のエクスペリエンスを 購入までの時間を短縮することを念頭に置いて設計されています。優先順位付け 成功するためには ユーザーエクスペリエンスの質が不可欠です研究発表 をご覧ください ウェブ パフォーマンスが消費者の投資する意思があることを オンラインでのブランドとの提携
Trendyol は、約 3,000 万人の顧客を抱える e コマース プラットフォームです。 240,000 の販売者を抱え、トルコ初の企業となりました。 同社は e コマースプラットフォームの できます。
可能な限り最良のユーザー エクスペリエンスを大規模に提供するという同社の目標を達成するため コンテンツの柔軟性を保ちながら、古いバージョンの React の Trendyol は、重要な指標として Interaction to Next Paint(INP) に焦点を当てました。 向上しますこのケーススタディでは、 PLP の導入により、INP が 50% 減少、検索が 1% 増加 ビジネス指標。
Trendyol の INP 調査プロセス
INP はユーザー入力に対するウェブサイトの応答性を測定します。INP が優れているということは、 ブラウザがすべてのユーザー入力にすばやく確実に応答し、 ページを再描画します。これは、優れたユーザー エクスペリエンスの重要な要素です。
Trendyol が PLP で INP を改善する取り組みの第一歩は、 改善を行う前のユーザー エクスペリエンスです。PSI レポートによると PLP の実際のユーザー エクスペリエンスは、 モバイル デバイスの IP アドレスに接続する必要があります。
<ph type="x-smartling-placeholder">優れた応答性を確保するには、サイト所有者は INP を以下または 200 ミリ秒です。つまり、その時点で Trendyol の INP は 「要改善」あります。
幸いなことに、PSI は、Chrome ユーザー
エクスペリエンス レポート(CrUX)と詳細なラボ診断データが提供されます。ラボを見る
Lighthouse の JavaScript 実行時間監査によると、
search-result-v2
スクリプトが他のスクリプトよりも長い時間メインスレッドを占有していた
使用できます。
実際のボトルネックを特定するために、Chrome のパフォーマンス パネルを使用しました。 DevTools を使用して PLP エクスペリエンスをトラブルシューティングし、 あります。Chrome DevTools で CPU の 4 倍低速なモバイルのパフォーマンスをエミュレートする メインスレッドでの 700 ~ 900 ミリ秒のタスクを明らかにしました。メインの スレッドが他のタスクで 50 ミリ秒以上占有されている場合、 ユーザー入力にタイムリーに応答できないため、 向上させることができます
<ph type="x-smartling-placeholder">最も長いタスクは、インスタンスの Intersection Observer API コールバックによって React コンポーネント内で 検索結果スクリプトを実行しますこの時点で 長いタスクを小さなチャンクに分割して ブラウザにより多くの処理を ユーザーとのやり取りなど、優先度の高い作業に対応する機会が得られます。
React をトリガーする setState
オペレーションを使用すると、
Intersection Observer コールバック内の再レンダリングにはコストがかかります。
ローエンドのデバイスでは問題となる可能性があります。そのためには、
長すぎます。
これまでデベロッパーがタスクを小さなものに分割する方法の 1 つに
setTimeout
が関与します。この手法を使用して、
別のタスクに setState
呼び出します。setTimeout
では遅延が可能になりますが、
優先度を制御できません。これにより、
scheduler.yield
オリジン トライアルに参加して、
メインスレッドに送られた後のスクリプト実行の継続:
/*
* Yielding method using scheduler.yield, falling back to setTimeout:
*/
async function yieldToMain() {
if('scheduler' in window && 'yield' in scheduler) {
return await scheduler.yield();
}
return new Promise(resolve => {
setTimeout(resolve, 0);
});
}
/*
* Yielding to the main thread before changing the state of the component:
*/
const observer = new IntersectionObserver((entries) => {
entries.forEach(handleIntersection);
const maxNumberOfEntries = Math.max(...this.intersectingEntries);
if (Number.isFinite(maxNumberOfEntries)) {
await this.yieldToMain();
this.setState({ count: maxNumberOfEntries });
}
}, { threshold: 0.5 });
この生成メソッドを PLP コードに追加した結果、INP が改善されました。 一連の小さなタスクに分割されました。これにより、 優先度の高い処理(ユーザーの操作や後続のレンダリング処理など)を より迅速に行われるようになります。
<ph type="x-smartling-placeholder">なお、Trendyol は、PuzzleJs フレームワークを使用してマイクロ フロントエンドを実装しています。 React v16.9.0 を使用しています。React 18 でも同じパフォーマンスを しかし、さまざまな理由から Trendyol は あります。
ビジネスの成果
導入した INP の改善による効果を測定するために、A/B テストを実施して、 ビジネス指標への影響を確認できますPLP の変更により、 INP の 50% 削減および 1% のコスト削減など、 リスティング ページから商品の詳細ページまでのクリック率が上昇 ユーザーセッションごとに 課金対象となります次の図を見ると、P-MAX の PLP の推移:
<ph type="x-smartling-placeholder">まとめ
INP の最適化は複雑で反復的なプロセスだが、簡単にできる 明確なワークフローが必要ですサイトのデバッグと改善を行う ウェブサイトの INP は、独自のフィールド データを収集するかどうかによって異なります。もし PSI と Lighthouse から始めることをおすすめします。目標を特定し 問題のあるページが見つかった場合は、DevTools を使用してさらに掘り下げて再現を試みる サポートします。
ブラウザの処理時間を増やすために、ときどきメインスレッドに移る
ウェブサイトの応答性が向上し、
顧客体験の向上につながります新しい Scheduling API
scheduler.yield()
のようにすると、このタスクが容易になります。
Google Cloud の Jeremy Wagner、Barry Pollard、Houssein Djirdeh に Google、Trendyol のエンジニアリング チームの協力を得て開発されました。