INP'yi düzeltmeyle ilgili Economic Times arayışı

TBT'yi 30 kat azaltıp Next.js'e geçiş yapan The Ecomonic Times, INP'yi yaklaşık dört kat azalttı. Bu da hemen çıkma oranında %50'lik bir düşüşe ve sayfa görüntüleme sayısında %43'lük bir artışa yol açtı.

Daya Ram Yadav
Daya Ram Yadav
Saurabh Rajpal
Saurabh Rajpal

Interaction to Next Paint (INP), bir web sitesinin kullanıcı girişine yanıt verme oranını değerlendiren bir metriktir. Sayfanın kullanıcı etkileşimlerine hızlı yanıt vermesi, sayfanın duyarlılığının iyi olduğunu gösterir. Bir sayfanın INP değeri ne kadar düşük olursa, kullanıcı etkileşimlerine o kadar iyi yanıt verebilir.

İyi INP değerleri 200 milisaniye veya daha az, kötü değerler 500 milisaniyeden fazladır. Bu değerler arasındaki değerlerde iyileştirme yapılması gerekir.

Bulanık başlangıç

Google, INP'yi ilk olarak Core Web Vitals metriklerinden biri haline gelebilecek deneysel bir metrik olarak kullanıma sunduğunda Economic Times ekibi, dünya standartlarında bir kullanıcı deneyimi sunmak temel işletme değerlerimiz açısından çok önemli olduğundan, INP'yi Core Web Vitals metriği haline gelmeden önce düzeltme görevini üstlendi.

INP, bugüne kadar çözülmesi en zor metriklerden biri olmuştur. Başlangıçta, INP'nin etkili bir şekilde nasıl ölçüleceği net değildi. Bu süreci daha da zorlaştıran, gerçek kullanıcı izleme (RUM) sağlayıcılarının çoğunun henüz bu özelliği desteklememesi de dahil olmak üzere topluluk desteğinin olmamasıydı. Bununla birlikte, Chrome Kullanıcı Deneyimi Raporu (CrUX), web-vitals JavaScript kitaplığı ve onu destekleyen başka Google RUM araçlarımız vardı. Bu araçlar, bizi bekleyen yolu değerlendirirken ne durumda olduğumuzu anlamamızı sağladı. Başladığımızda kaynak düzeyinde INP'miz 1.000 milisaniyeye yakındı.

Alanda INP'yi düzeltirken, hedeflenecek laboratuvar metriklerinden birinin Toplam Engelleme Süresi (TBT) olabileceği ortaya çıktı. Geçmişe Dönüş özelliği, topluluk tarafından zaten iyi biliniyor ve destekleniyor. Core Web Vitals eşiklerini zaten karşılıyor olsak da TBT konusunda o kadar iyi değildik. Başladığımızda bu süre 3 saniyenin üzerindeydi.

Geçmişe Dönen Perşembe nedir ve bu özelliği iyileştirmek için hangi adımları attık?

TBT, bir web sayfasının sayfa yükleme sırasında kullanıcı girişine yanıt verme durumunu ölçen bir laboratuvar metriğidir. Yürütülmesi 50 milisaniyeden uzun süren görevler uzun görev olarak kabul edilir. 50 milisaniyelik eşikten sonraki süre ise engelleme süresi olarak adlandırılır.

TBT, sayfa yükleme sırasındaki tüm uzun görevlerin engelleme süresinin toplamı alınarak hesaplanır. Örneğin, yükleme sırasında iki uzun görev varsa engelleme süresi aşağıdaki şekilde belirlenir:

  • A görevi 80 milisaniye (50 milisaniyeden 30 milisaniye fazla) sürer.
  • Görev B 100 milisaniye (50 milisaniyeden 50 milisaniye daha uzun) sürer.

Sayfanın TBT değeri: 80 milisaniye (30 + 50). TBT ne kadar düşük olursa o kadar iyidir. Ayrıca TBT, IPN ile iyi bir korelasyona sahiptir.

Aşağıda, TBT'mizin iyileştirilmesi için atılan adımlardan önceki ve sonraki lab'in kısa bir karşılaştırmasını bulabilirsiniz:

Chrome Geliştirici Araçları'nın performans panelinde gösterildiği üzere başlatma sırasındaki uzun görevlerin birleşik görüntüsü ve sayfa metriklerinin raporu. Ana iş parçacığı, sayfa yükleme sırasında 3.260 milisaniye boyunca engellenir.
TBT'yi optimize etmeden önce başlatma sırasındaki ana mesaj dizisi. TBT 3.260 milisaniyedir.
Chrome Geliştirici Araçları'nın performans panelinde gösterildiği gibi, başlatma sırasındaki uzun görevlerin birleştirilmiş resmi ve sayfa metriklerinin raporu. Ana iş parçacığı, sayfa yükleme sırasında 120 milisaniye boyunca engellenir.
TBT'yi optimize ettikten sonra başlatma sırasındaki ana iş parçacığı. TBT 120 milisaniyedir.

Ana iş parçacığının işini en aza indirme

Tarayıcının ana iş parçacığı; HTML'yi ayrıştırmaktan, DOM'u oluşturmaktan, CSS'yi ayrıştırıp stilleri uygulamaya ve JavaScript'i değerlendirmeye ve yürütmeye kadar her şeyi yönetir. Ana iş parçacığı, kullanıcı etkileşimlerini (ör. tıklama, dokunma ve tuş basma) de işler. Ana ileti dizisi başka işlerle meşgulse kullanıcı girişlerine verimli bir şekilde yanıt vermeyebilir ve can sıkıcı bir kullanıcı deneyimine yol açabilir.

Abonelik durumuna göre reklam sunarken kullanıcı kimliğini tespit eden kendi algoritmalarımız, A/B testi, analizler ve daha fazlası için üçüncü taraf komut dosyalarından dolayı bu bizim en zor görevdi.

İlk başta, daha az kritik işletme öğelerinin yüklenmesine öncelik vermek gibi küçük adımlar uyguladık. İkinci olarak, kritik olmayan işler için requestIdleCallback kullandık. Bu, TBT'yi azaltmaya yardımcı olabilir.

if ('requestIdleCallback' in window) {
  this.requestIdleCallbackId = requestIdleCallback(fetchMarketsData.bind(this), {timeout: 3000});
} else {
  fetchMarketsData(); // Fallback in case requestIdleCallback is not supported
}

requestIdleCallback kullanılırken zaman aşımı belirtilmesi önerilir. Belirtilen süre dolup geri çağırma çağrısı yapılmamışsa geri çağırma işleminin zaman aşımından hemen sonra yürütülmesini sağlar.

Komut dosyası değerlendirme süresini en aza indirin

Ayrıca, yüklenebilir bileşenleri kullanarak üçüncü taraf kitaplıklarını da geç yükledik. Ayrıca, Chrome Geliştirici Araçları'ndaki kapsam aracını kullanarak sayfanın profilini çıkararak kullanılmayan JavaScript ve CSS'leri de kaldırdık. Bu sayede, sayfa yükleme sırasında daha az kod göndermek için ağaç sallama işleminin gerekli olduğu alanları belirleyebildik ve dolayısıyla uygulamanın ilk paket boyutunu küçülttük.

Chrome Geliştirici Araçları'ndaki kapsam aracının ekran görüntüsü. Burada araç, sayfa yükleme sırasında JavaScript ve CSS dosyalarının kullanılmayan bölümlerini gösterir.

DOM boyutunu küçültme

Lighthouse'a göre büyük DOM boyutları bellek kullanımını artırır, stil yeniden hesaplamalarının uzun sürmesine neden olur ve yüksek maliyetli düzen yeniden düzenlemeleri üretir.

Lighthouse'taki DOM boyutu denetiminin ekran görüntüsü. Bildirilen DOM öğelerinin sayısı 2.706 öğedir.

DOM düğümlerinin sayısını iki şekilde azalttık:

  • İlk olarak menü öğelerimizi kullanıcının isteği üzerine (tıklandığında) oluşturduk. DOM boyutunu yaklaşık 1.200 düğüm azalttı.
  • İkinci olarak, daha az önemli widget'ları yavaş yükledik.

Tüm bu çalışmalar sayesinde TBT'yi önemli ölçüde azalttık ve INP'miz buna uygun şekilde yaklaşık %50 oranında azaldı:

CrUX'taki INP denetiminin ekran görüntüsü. Sayfanın INP değeri 539 milisaniyedir ve bu değer "yetersiz" eşiğini aşar.

Bu noktada TBT'yi (ve proxy yoluyla INP'yi) daha da azaltacak kolay kazanımlarımız kalmamıştı ama çok fazla iyileştirme alanımızın olduğunu biliyorduk. Bu nedenle, bileşenlerin gereksiz şekilde yeniden oluşturulmasını önlemek amacıyla kancaların daha iyi kullanılması için özel olarak geliştirilmiş kullanıcı arayüzü standart belgemizi Next.js ile birlikte React'in en son sürümüne yükseltmeye karar verdik.

Web sitesinin diğer bölümlerine kıyasla daha sık güncelleme ve nispeten daha az trafik almaları nedeniyle konu sayfalarımızı Next.js'e taşımaya başladık. Ayrıca, ek ağır ana iş parçacığı işlerini web çalışanlarına boşaltmak için PartyTown yöntemini ve kritik olmayan görevleri ertelemek için requestIdleCallBack gibi tekniklerden yararlandık.

INP'nin iyileştirilmesi The Economic Times'a nasıl yardımcı oldu?

Kaynaktaki mevcut TBT ve INP

Bu yayını yayınladığımız tarihte, kaynağımız için TBT tam 120 milisaniyeydi. Bu sayı, optimizasyon çalışmalarımıza başladığımızda 3.260 milisaniyeydi. Benzer şekilde, optimizasyon çalışmalarımız sonrasında kaynağımızın INP'si 257 milisaniyeye düştü. Bu değer, 1.000 milisaniyeden fazlaydı.

CrUX'teki INP denetiminin ekran görüntüsü. Sayfa için INP 257 milisaniyedir ve bu değer, "iyileştirme gerekli" eşikleri dahilindedir.

INP CrUX trendi

Konu sayfalarında alınan trafik, genel trafiğin önemli ölçüde küçük bir bölümünü oluşturmaktadır. Bu nedenle, burası denemeler için ideal bir yerdi. CrUX sonuçları ve işletme sonuçları çok cesaret vericiydi. Daha fazla avantaj elde etmek için çabalarımızı web sitesinin tamamına yaymamıza yol açtı.

Temmuz 2022'den Ekim 2022'ye kadar olan dört aylık dönemde CrUX'ta görselleştirilen INP dağılımları ekran görüntüsü. "Yetersiz" ve "İyileştirme gerekiyor" eşiklerindeki değerler biraz düştü, "İyi" eşikindeki değerler ise arttı.

Akamai mPulse TBT Analizi

RUM çözümümüz olarak, sahada TBT'yi ölçen Akamai mPulse'ü kullanıyoruz. TBT'de tutarlı bir düşüş gözlemledik. Bu düşüş, INP'yi azaltma çalışmalarımızın sonuçlarıyla açıkça ilişkili. Aşağıdaki ekran görüntüsünde görüldüğü gibi, TBT değerleri sonunda yaklaşık 5 saniyeden alanda yaklaşık 200 milisaniyeye düştü.

Akamai mPulse'deki bir grafiğin ekran görüntüsünde yaklaşık bir ay içindeki TBT düşüşü gösteriliyor.

İşletme sonucu

Genel olarak, TBT'yi 30 kat azaltma çalışmalarımız ve Next.js'e geçişimiz, INP'yi yaklaşık 4 kat azaltmamıza yardımcı oldu. Bu da konu sayfalarında hem hemen çıkma oranında %50'lik bir düşüşe hem de sayfa görüntüleme sayısında %43'lük bir artışa yol açtı.

Sayfa görüntülemelerle hemen çıkma oranını karşılaştıran Google Analytics ekran görüntüsü. The Economic Times web sitesinde INP'de yapılan optimizasyonlar sayesinde hemen çıkma oranında %50 düşüş ve sayfa görüntüleme sayısında %43 artış elde edildi.

Sonuç

Özetlemek gerekirse INP, Economic Times web sitesinin bazı bölümlerindeki çalışma zamanındaki performans sorunlarını belirlemeye büyük ölçüde yardımcı oldu. İşle ilgili sonuçları olumlu yönde etkileyen en etkili metriklerden biri olduğu kanıtlanmıştır. Bu çalışmanın sonucunda gözlemlediğimiz çok cesaret verici rakamlar sayesinde, optimizasyon çalışmalarımızı web sitemizin diğer alanlarına ölçeklendirmek ve ek avantajlardan yararlanmak için motive olduk.