translation

AI tarafından çevrilmiş metin.

뚠뚠멍의 생각들

Web Sitesi Performansını Ölçme - PerformanceObserver

  • Yazım Dili: Korece
  • Referans Ülke: Tüm Ülkelercountry-flag
  • BT
Profil Resmi

durumis AI tarafından özetlenen yazı

  • Web sitesi performansını iyileştirmek için Web performans ölçüm araçlarını (PageSpeed Insights, Lighthouse) kullanmak, arama motoru görünürlüğünü artırır ve Web Core Vitals metrikleri önemlidir.
  • CLS, LCP, FCP, FID gibi metrikleri iyileştirmek için UI iskeleti, resim optimizasyonu, işlemeyi engelleyen öğelerin kaldırılması, web yazı tipi optimizasyonu, JavaScript'in eşzamansız işlenmesi gibi yöntemler uygulanabilir.
  • Her bir metrik iyileştirme yöntemi ile birlikte web performansını artırmak için çeşitli teknikler (gzip sıkıştırması, web işçileri vb.) tanıtılır ve gelecekte ilgili konular daha derinlemesine ele alınacaktır.

Google tarafından sağlanan bir site aracılığıyla


web performansını kolayca ölçebilirsiniz.


https://pagespeed.web.dev/
adresini girerek ölçebilirsiniz veya Chrome uzantısı olarak Lighthouse'ı (Lighthouse) yükleyerek ölçebilirsiniz.


Göstergeleri iyileştirmenin faydaları nelerdir?

Arama motorlarında daha iyi görünürlük elde edebilirsiniz. SEO (Arama Motoru Optimizasyonu) nedeniyle sunucu tarafı işleme (server-side rendering) sıklıkla kullanılır,

Ancak yukarıdaki performans göstergeleri düşükse, bu etki azalacaktır.


Nasıl iyileştirilir?

web.dev sitesinde, her bir göstergenin nasıl iyileştirilebileceği ayrıntılı olarak açıklanmıştır.

Özellikle 3 gösterge puanda büyük bir paya sahiptir. (Web Core Vitals)

Göstergeleri iyileştirmek için denediğim şeyleri kaydetmek istiyorum.


Yerel olarak nasıl ölçülür?


export default () => {
if (process.client && 'PerformanceObserver' in window) {
let cumulativeLayoutShiftScore = 0;
let largestContentfulPaint = 0;
let firstInputDelay = 0;
let firstContentfulPaint = 0;
// CLS
const clsObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  entries.forEach((entry) => {
    if (!entry.hadRecentInput) {
      cumulativeLayoutShiftScore += entry.value;
    }
  });
});

// LCP
const lcpObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const lastEntry = entries[entries.length - 1];
  largestContentfulPaint = lastEntry.startTime;
});

// FID
const fidObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const firstEntry = entries[0];
  firstInputDelay = firstEntry.processingStart - firstEntry.startTime;
});

// FCP
const fcpObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const firstEntry = entries[0];
  firstContentfulPaint = firstEntry.startTime;
});

clsObserver.observe({ type: 'layout-shift', buffered: true });
lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
fidObserver.observe({ type: 'first-input', buffered: true });
fcpObserver.observe({ type: 'paint', buffered: true });

window.addEventListener('onload', () => {
  console.log('Final CLS Score:', cumulativeLayoutShiftScore);
  console.log('LCP:', largestContentfulPaint);
  console.log('FID:', firstInputDelay);
  console.log('FCP:', firstContentfulPaint);
});
}
};

Yukarıdaki kodu ekleyin. Nuxt (Nuxt) kullanıyorsanız, eklentilere (plugins) yerleştirin ve konsol çıktısını kontrol edin.

Kümülatif Düzen Kayması (Cumulative Layout Shift - CLS)

İşleme sırasında düzenin değişme derecesini ölçer.

Örneğin, API yanıtını kullanarak bir resim URL'si alan ve 400x400 boyutunda bir resim işleyen bir sayfa olduğunu varsayalım,

Bazı düzenler, resmin işlenmesiyle birlikte 400 piksel kadar kayacaktır.

Bu, kullanıcının beklemediği bir harekettir ve kullanıcı deneyimine (UX) zarar verir, ayrıca tarayıcı da ekranı işlerken

dolaylı olarak olumsuz etkilenir.


İyileştirme için iki kolay yol vardır.


1. Kullanıcı Arayüzü İskeleti Uygulamak

- Çoğu site, resim boyutuna veya bileşen boyutuna uygun iskeletleri düzgün bir şekilde çizer. Ekran geliştirilirken bu nokta dikkate alınır. Vue (Vue) kullanıyorsanız, her bir öğeye uygun iskeleti çizmek için v-if ve v-else'i (v-if ve v-else) kullanabilirsiniz.

2. Yüksekliği Rezerv Etmek

- İskelete çok fazla stil eklenirse, bakım karmaşıklaşabilir ve ters etki yaratabilir. Sadece işlenecek öğenin minimum yüksekliğini (min-height) belirlemek bile etkili olabilir.


- Duyarlı web (responsive web) gibi resim boyutunun cihaza göre değiştiği durumlarda, yüksekliği sabit bir şekilde belirlemek zordur. Bu durumda, en küçük cihazı veya vh veya vw'yi (vh veya vw) referans alabilirsiniz.

3. Resim Öğelerine Genişlik ve Yükseklik Belirtmek

- Resim öğesine genişlik ve yükseklik şu şekilde eklenebilir:

<img src="image.jpg" width="400" height="400">

Resmin gerçek boyutu 400x400 olmasa bile, tarayıcıya resmin beklenen boyutunu bildirir.

4. Web Yazı Tiplerinden Kaynaklanan Düzen Değişikliklerini Önlemek İçin font-display: swap Kullanmak

- Yedek yazı tipi belirterek düzen kaymasını engeller.



En Büyük İçerik Boyutu (Largest Contentful Paint - LCP)

Ekranda en büyük alanı kaplayan öğenin işlenmesinin ne kadar sürdüğünü gösterir. Genellikle resim olur, bu nedenle sezgisel olarak yükleme hızını artırmanız gerekir.


1. Resim boyutunu küçültün.

- İşleme boyutuna göre resim boyutunun büyük olup olmadığını kontrol edin.

- WebP (WebP) gibi uzantılarla resim işlemeyi optimize edin. WebP, kayıplı sıkıştırma kullanıldığında JPEG formatından yaklaşık %30 daha küçük bir dosya boyutuna sahipken, kayıpsız sıkıştırma kullanıldığında PNG'den (PNG) yaklaşık %20 daha küçük bir boyuta sahiptir.

- Kaydırma konumuna göre yüklenen tembel yüklemeyi (lazy loading) de düşünebilirsiniz.


2. Önbelleğe alma (caching) veya CDN (Content Delivery Network) kullanın.

3. İşlemeyi engelleyen öğeleri kaldırın.

- Çoğu ölçüm göstergesi bundan etkilendiği için mutlaka kaldırılmalıdır. Tarayıcı, ekranı işlerken başlık (head) etiketindeki komut dosyalarını (script) önce alır ve ardından işleme işlemine başlar, bu nedenle başlık (head) etiketindeki komut dosyalarının (script) (genellikle harici komut dosyaları) önce işlenmesi gerekip gerekmediğini kontrol edin. Bununla ilgili olarak, async ve defer etiketlerini kullanarak kolayca yönetebilirsiniz.

* Başlık (head) içindeki komut dosyası (script) öznitelikleriyle ilgili olarak daha sonra başka bir yazı yazacağım.

4. Paket boyutunu en aza indirin.

- Resimlerin işlenme hızının yavaş olmasıyla ayrı olarak, sunucudan iletim yavaşsa, bunu iyileştirmeniz gerekecektir.

Nginx (Nginx) gibi bir proxy sunucusu kullanıyorsanız, gzip sıkıştırmasını (gzip compression) kullanabilirsiniz.

* Nginx (Nginx) ayarlarıyla ilgili olarak daha sonra başka bir yazı yazacağım.

İlk İçerik Boyutu (First Contentful Paint - FCP)

Sayfada ilk içeriğin işlendiği anı gösterir.

1. Benzer şekilde, işlemeyi engelleyen öğeleri kaldırın.

2. HTML boyutunu en aza indirin.

- Kontrolsüz bir şekilde div div etiketleriyle sarmak, çok fazla iç içe geçmiş bir ağaç oluşturur ve dosya boyutunu artırır.

3. Harici web yazı tipleri sorun olabilir. font-display: swap; özelliğini aktif olarak kullanarak varsayılan yazı tipini önce işleyin.


İlk Giriş Gecikmesi (First Input Delay - FID)

Kullanıcının sayfada ilk girdiyi (tıklama, kaydırma vb.) gerçekleştirdiği anda tarayıcının bunu işleme süresini gösterir. Bazen bir düğmeye basıldığında yanıt verilmeyebilir, ancak aslında yanıt verilmemesi değil, API yanıtının bekleniyor olması olabilir.


1. Eşzamansızlığı (asynchronous) doğru bir şekilde kullanarak JavaScript ana iş parçacığının (main thread) ağır işlere takılmamasını sağlayın.

2. Ana iş parçacığından (main thread) ayrı olarak, web işçileri (web worker) kullanarak başka işler yapılabilir.

* Web işçileri (web worker) hakkında daha sonra başka bir yazı yazacağım.

Karakter sayısı sınırlaması nedeniyle burada sonlandırıyorum.



뚠뚠멍
뚠뚠멍의 생각들
뚠뚠멍
nginx'i Web Sunucusu Olarak Kullanırken Temel Ayarlarnginx web sunucusunun temel ayarları (gzip sıkıştırma, proxy_buffer, worker/http ayarları, location bloğu) aracılığıyla web performansını optimize etmenin yollarını açıklar. Performans testinden sonra uygulayın.

September 26, 2024

Yaşadığım Çapraz Tarayıcı Sorunu (Safari)Mobil web geliştirme sırasında Safari'de ortaya çıkan düzen sorunlarının çözüm yöntemlerini sunuyorum. Viewport hesaplama sorunları ve klavye konumlandırma sorunlarına yönelik çözümler ve -webkit- satıcı öneki kullanımını ele alıyorum.

September 27, 2024

Yaşadığım Çapraz Tarayıcı Sorunları (Özellikle Safari)Mobil web geliştirme sırasında karşılaşılan çapraz tarayıcı sorunlarını (özellikle Safari) ve çözüm yöntemlerini kaydettiğim bir yazı. Viewport yüksekliği hesaplama sorunu, sanal klavye nedeniyle UI kayma sorunu ve Safari'nin LocalStorage kapasite sınırla

September 27, 2024

CSS object-fit Özelliğinin Tam KılavuzuCSS object-fit özelliğini kullanarak web görüntülerini verimli bir şekilde boyutlandırma ve gösterme yöntemini öğrenin. Görüntü oranını koruma, kırpma, doldurma gibi çeşitli seçenekler sunar.
Meursyphus
Meursyphus
Meursyphus
Meursyphus

July 14, 2024

SEO'da Sayfa İçi SEO Nedir?Web sitenizin içeriği, anahtar kelimeleri ve meta etiketleri gibi unsurlarını optimize ederek arama motoru sıralamasında yükselmenin yollarını öğrenin. Çeşitli faktörleri iyileştirerek web sitenize daha fazla ziyaretçi çekin ve arama sonuçlarında daha üst
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

May 28, 2024

Mobil SEO Optimizasyonu: Mobil Dostu Bir Web Sitesi OluşturmaMobil kullanıcı sayısının artmasıyla birlikte mobil SEO optimizasyonu da önem kazandı. Duyarlı web tasarımı, hızlı yükleme hızı, kolay gezinme gibi özellikler aracılığıyla mobil dostu bir web sitesi oluşturabilirsiniz.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

June 10, 2024

Cloud Run Kullanarak Statik Dosya Sunumu - 1Google Cloud Run'ı kullanarak statik dosyaların nasıl sunulacağına dair bir blog yazısıdır. Yönlendirme ve performans iyileştirmelerine odaklanmaktadır.
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 4, 2024

Google Cloud Storage ve Cloud Run Kullanarak CDN'yi Kullanma - 2Google Cloud Storage ve Cloud Run'ı kullanarak CDN oluşturma yöntemine ilişkin ikinci bir makaledir. Görüntü ve metin dosyalarını optimize ederek göndermeyi ve gecikmeyi azaltmak için kaynakları dünya çapında 8 bölgeye dağıtma yöntemini açıklamaktadır.
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 6, 2024

Web Sitesi Faviconu Optimizasyonu: Marka Bilinirliği ve Kullanıcı Deneyimini Artırmak İçin StratejilerWeb sitesi faviconu optimizasyonu ile marka bilinirliğini ve kullanıcı deneyimini nasıl artırabileceğinizi öğrenin. Tasarım, dosya biçimi, HTML kod ekleme gibi yöntemlerle web sitenizin kalitesini artırabilirsiniz.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

July 18, 2024