CSS Performans Optimizasyonu: GitHub Daha Hızlı Yükleme Süreleri İçin Neden Daha Fazla (Değil, Daha Az) CSS Gönderiyor
On yılı aşkın süredir ön uç performans oyun kitabı dikkat çekici bir şekilde tutarlıydı: CSS'inizi küçültün, kritik yolu satır içine alın, geri kalanını bölün ve her şeyi eşzamansız olarak teslim edin. “Daha az kod gönder” mottosu, kolektif geliştirici bilincimize o kadar derinden işlemişti ki, bunu sorgulamak neredeyse sapkınlık gibi geliyordu.
Sonra GitHub'ın mühendislik ekibi “Daha Fazla CSS Göndererek Site Performansını İyileştirme” başlıklı bir yazı yayınladı ve ön uç topluluğu topluca kaşlarını kaldırdı. Başlık başlı başına bir çelişki gibi okunuyor. Bir siteyi daha hızlı hale getirmek için daha fazla CSS göndermek? Bu ters değil mi?
Görünen o ki, hayır. GitHub'ın bulguları, yıllardır CSS teslim stratejilerini yöneten geleneksel bilgeliğe meydan okuyor. Verileri, kritik CSS'i satır içine alma ve geri kalanını kod bölme şeklindeki geleneksel yaklaşımın teoride mantıklı olsa da, gerçek dünya koşullarında genellikle azalan getiriler sağladığını ortaya koyuyor. Bazı durumlarda, performansa aktif olarak zarar veriyor .
Bu derinlemesine incelemede, GitHub'ın sezgilere aykırı keşfini açıklayacak, daha fazla CSS göndermenin neden daha hızlı olabileceğini açıklayan metrikleri inceleyecek ve bunun kendi geliştirme iş akışınız için ne anlama geldiğini, DivMagic gibi araçların modern, performans odaklı bir CSS stratejisine nasıl uyduğunu da keşfedeceğiz.
Geleneksel CSS Teslim Oyun Kitabı
GitHub'ın yaklaşımının neden devrim niteliğinde olduğunu takdir edebilmemiz için, meydan okuduğu çerçeveyi anlamamız gerekiyor. Çoğu performans kılavuzunun önerdiği standart CSS optimizasyon stratejisi şuna benzer:
Adım 1: Kritik CSS'i Satır İçine Alın
Ekranın üst kısmındaki içeriği (above-the-fold) oluşturmak için gereken CSS kurallarını çıkarın ve bunları doğrudan HTML'inizin <head> bölümüne satır içi olarak ekleyin. Bu, ilk boyama sırasında harici stil sayfası için oluşan işleme engelleyen isteği ortadan kaldırır.
Adım 2: Tam Stil Sayfasını Eşzamansız Olarak Yükleyin
Tam CSS dosyasını, preload veya media özniteliği hilesini kullanarak eşzamansız olarak yükleyin; böylece tarayıcı satır içi stillerle hemen oluşturmaya başlayabilir ve tam stil sayfası geldiğinde uygulayabilir.
Adım 3: CSS'i Rota veya Bileşene Göre Kod Bölme
Tek sayfa uygulamalarında, yalnızca geçerli görünüm için gereken CSS'i sunun. PurgeCSS, CSS modülleri ve çerçeveye özgü kod bölme yardımcı programları gibi araçlar bu ayrıntılı yaklaşımı mümkün kılar.
Kağıt üzerinde bu strateji her baytı optimize eder. Ancak pratikte, nadiren tartışılan bir dizi ödünleşimi beraberinde getirir ve GitHub'ın mühendislik ekibinin araştırmalarına tam da buradan başladılar.
GitHub'ın temel bulgusu: kritik CSS için birden çok işleme engelleyen isteği yürütmenin maliyeti, genellikle biraz daha büyük, tamamen önbelleğe alınmış bir stil sayfası sunmanın maliyetini aşıyor. Darboğaz CSS boyutu değil, istek sayısı ve önbelleğe alma stratejisidir.
GitHub'ın Sezgilere Aykırı Keşfi
GitHub, çoğu büyük ölçekli platform gibi, karmaşık bir CSS teslim sistemi uygulamıştı. Kritik CSS'i satır içine aldılar, geri kalanını rotaya özel parçalara böldüler ve işleme engelleyen davranışı önlemek için modern yükleme teknikleri kullandılar. Yine de gerçek kullanıcı izleme (RUM) verileri, beklentileriyle çelişen bir hikaye anlattı.

Geliştiricilerin günde düzinelerce kez geri döndüğü GitHub gibi bir site için norm olan tekrarlanan ziyaretler, olması gerekenden daha yavaştı . Her sayfa yükünde yürütülen satır içi kritik CSS, JavaScript yürütme süresi ekliyordu. Rotaya dayalı parçalar, her gezinmenin yeni bir CSS isteğini tetiklediği anlamına geliyordu. Sistemin karmaşıklığı, orantılı bir fayda sağlamadan ek yük getiriyordu.
Çözümleri senaryoyu tersine çevirmekti: ilk ziyarette tarayıcı tarafından önbelleğe alınan ve sonraki tüm gezinmelerde yeniden kullanılan tek, daha büyük bir CSS dosyası sunmak. Satır içi kritik CSS yok. Rota başına bölme yok. Eşzamansız yükleme hileleri yok. Sadece bir dosya, bir istek, tamamen önbelleğe alınmış.
Sonuç? Kullanıcıların büyük çoğunluğu için daha hızlı sayfa yüklemeleri, azaltılmış JavaScript yürütme ek yükü ve önemli ölçüde daha basit bir kod tabanı.
“En hızlı CSS isteği, hiç gerçekleşmeyendir. Tek bir önbelleğe alınmış stil sayfası, her tekrar ziyareti neredeyse ücretsiz hale getirir.”
Neden “Daha Fazla CSS” Aslında Daha Fazla Değil
Burada gözden kaçırılması kolay önemli bir nüans var. GitHub şişirilmiş CSS göndermiyor; birleştirilmiş, optimize edilmiş ve önbelleğe alınabilir bir CSS dosyası gönderiyor. Başlıklarındaki “daha fazla” kelimesi, tek bir istekte iletilen CSS hacmini ifade ediyor, aşırı büyük stil sayfalarının onaylanması anlamına gelmiyor.
Temel ayrım, aktarılan toplam bayt ile aktarılan etkin bayt arasındadır. Bir CSS dosyası önbelleğe alındığında, tarayıcının sonraki sayfa yüklemelerinde onu tekrar getirmesi gerekmez. HTTP isteği asla yapılmaz, baytlar asla aktarılmaz ve işleme yolu temizdir. Buna karşılık, satır içi CSS, içerik değişmiş olsun veya olmasın, her HTML yanıtıyla birlikte yeniden gönderilir.
Tekrar ziyaret deneyimi olan bu metrik, GitHub'ın verilerinin en çarpıcı iyileşmeyi gösterdiği yerdir. Kullanıcıların depolar, sorunlar, çekme istekleri ve kod görünümleri arasında hızla gezindiği bir platform için, tekrar gezinme kullanıcı deneyimine hakimdir.

Gerçekten Önemli Olan Metrikler
GitHub'ın kararını anlamak için, yüzeysel “toplam CSS dosya boyutu” metriğinin ötesine bakmanız ve gerçek dünyada algılanan performansı gerçekte neyin yönlendirdiğini incelemeniz gerekir.
İlk İçerikli Boyama (FCP)
FCP, tarayıcının DOM içeriğinin ilk parçasını ne zaman oluşturduğunu ölçer. Geleneksel kritik CSS, işleme engelleyen CSS'i ortadan kaldırarak FCP'yi en aza indirmeyi amaçlar. Ancak, CSS dosyası önbelleğe alınırsa, tekrar ziyaretlerde işleme engelleyen istek olmaz , tarayıcı önbellekten okur ve hemen boyar.
Etkileşime Kadar Geçen Süre (TTI)
TTI, bir sayfanın tamamen etkileşime hazır hale geldiği zamanı ölçer. Satır içi kritik CSS, eşzamansız stil sayfası yüklemeyi yöneten JavaScript ile birleştiğinde, tarayıcının tam stil sayfasını çözümlemeden önce JavaScript'i yürütmesi gerektiğinden TTI'yı aslında geciktirebilir . Tek bir önbelleğe alınmış CSS dosyası bu JavaScript bağımlılığını tamamen ortadan kaldırır.
Kümülatif Düzen Kayması (CLS)
CLS, görsel kararlılığı ölçer. Kritik CSS uygulamalarıyla ilgili en yaygın şikayetlerden biri, sayfanın “titremesine” neden olmalarıdır; tam stil sayfası yüklendikçe ve satır içi stilleri geçersiz kıldıkça düzen kayar. Baştan itibaren tek, tamamen yüklenmiş bir CSS dosyası, tekrar ziyaretlerde bu düzen kaymasını ortadan kaldırır.
İşte çevirinin devamı (tamamı, kaldığım yerden değil, eksiksiz olarak):Buradan çıkarılacak ders açıktır: Kullanıcıların birden fazla kez ziyaret ettiği her site veya uygulama için önbellek stratejisi, ilk dosya boyutundan daha önemlidir. Geliştirici araçları, panolar ve platformlar gibi tekrar ziyaretlerin istisna değil kural olduğu yerlerde ise bu belirleyici bir faktördür.
HTTP/2 ve "Çok Sayıda Küçük İstek" Döneminin Sonu
CSS'i parçalara ayırmanın (code-splitting) ilk motivasyonlarından biri, HTTP/1.1 isteklerinin getirdiği ek yüktü. Her istek ayrı bir TCP bağlantısı gerektiriyordu ve tarayıcılar her alan adı için yalnızca sınırlı sayıda bağlantı açabiliyordu. CSS'i daha küçük parçalara bölmek daha fazla istek anlamına geliyordu, ancak her istek indirilmesi daha hızlıydı; bu, bazen değen bir takastı.
HTTP/2 oyunu değiştirdi. Çoğullama (multiplexing) sayesinde tek bir TCP bağlantısı, hat başı engellemesi (head-of-line blocking) olmadan düzinelerce eşzamanlı isteği işleyebilir. Bu, CSS'i parçalara ayırmayı cazip kılan ek yükün büyük kısmını ortadan kaldırır. Modern hesap, özellikle bu büyük istekler önbelleğe alınabildiğinde, çok sayıda küçük istek yerine daha az, daha büyük isteklerden yanadır.
Siteniz hâlâ HTTP/1.1 üzerinden sunuluyorsa, HTTP/2'ye geçmek ilk önceliğiniz olmalıdır. Tek başına HTTP/2'den elde edilen performans kazanımları, çoğu zaman herhangi bir CSS optimizasyon stratejisinden elde edilen kazanımları aşar ve GitHub'ın "daha fazla CSS gönder" yaklaşımını baştan mümkün kılar.
Daha Fazla CSS Göndermek Ne Zaman Mantıklı, Ne Zaman Değil
GitHub'ın yaklaşımı evrensel bir çözüm değildir. Belirli özelliklere sahip siteler için harika çalışır, ancak her duruma uyan tek bir cevap değildir. Bu yaklaşımın projenize uyup uymadığını şu şekilde değerlendirebilirsiniz:
Ne Zaman İşe Yarar
- Yüksek tekrar ziyaret oranı: Kullanıcıların günde birden fazla kez geri döndüğü platformlar, panolar, dahili araçlar ve geliştirici ürünleri.
- Orta düzey CSS ayak izi: Gzip ile sıkıştırılmış toplam CSS 200KB'ın altında; önbelleklemeden faydalanacak kadar büyük, indirme cezasından kaçınacak kadar küçük.
- Çok sayfalı veya çok görünümlü gezinme: Kullanıcıların birçok farklı görünüm veya rota arasında gezinerek ilerlediği uygulamalar.
- HTTP/2 ve CDN önbellekleme: Verimli teslimatı ve güçlü önbellek başlıklarını destekleyen altyapı.
Ne Zaman İşe Yaramaz
- Tek ziyaretlik açılış sayfaları: Kullanıcıların çoğunun bir kez gelip bir daha dönmediği pazarlama sayfaları veya kampanya siteleri.
- Devasa CSS paketleri: Gzip ile sıkıştırılmış 500KB'ın üzerindeki stil sayfaları; burada ilk indirme cezası, önbellekleme faydasından daha ağır basar.
- Aşırı derecede farklı stiller: Bölümler arasında dramatik biçimde farklı CSS gereksinimleri olan siteler (pratikte bu nadirdir).
Bu, Geliştirme İş Akışınız İçin Ne Anlama Geliyor?
GitHub'ın keşfinin pratik etkileri yalnızca performans ölçümleriyle sınırlı değildir. CSS teslimat stratejisinin basitleştirilmesi, tüm geliştirme hattınız üzerinde kademeli bir etki yaratır.
Daha Basit Derleme Yapılandırması
Satır içi kritik CSS (critical CSS), kritik stilleri tanımlayabilen, bunları çıkarabilen ve derleme sırasında HTML'e enjekte edebilen derleme araçları gerektirir. Bu; bakım, test ve sürekli ince ayar gerektirir. Tek bir CSS dosyası tüm bu karmaşıklığı ortadan kaldırır. Derleme adımınız, çok aşamalı bir hattan basit bir CSS derlemesine dönüşür.
Daha Az Bağımlılık
Kritik CSS çıkarma araçları, eşzamansız yükleme kütüphaneleri ve rota tabanlı CSS enjeksiyon çerçeveleri gereksiz hale gelir. Bu, bağımlılık ayak izinizi ve bununla ilişkili güvenlik ve bakım yükünü azaltır.
Daha Kolay Hata Ayıklama
Satır içi kritik CSS'te bir şeyler ters gittiğinde hata ayıklamak son derece zordur. Sayfa yanlış görüntülenebilir, ardından tam stil sayfası yüklendiğinde aniden "sıçrayabilir". Stiller çoğaltılmış, çakışan veya eksik olabilir. Tek bir CSS dosyası, bu türdeki tüm hata ayıklama senaryolarını ortadan kaldırır.
Gönderdiğiniz CSS'i Optimize Etme
"Daha fazla CSS göndermenin" daha hızlı olabileceğini kabul etmek, CSS kalitesini görmezden gelmek için bir lisans değildir. Tek dosyada gönderdiğiniz CSS, mümkün olduğunca temiz, verimli ve amaca yönelik olmalıdır. Birleştirdiğiniz CSS'in önbelleğe alınmaya değer olduğundan emin olmanın yolu şudur:
Kullanılmayan Kuralları Temizleyin (Purge)
PurgeCSS gibi araçlar ve çerçeveye özel yardımcılar (örneğin Tailwind'in JIT modu), projenizde kullanılmayan CSS kurallarını kaldırır. Bu, CSS'i tüm site genelinde birleştirirken özellikle kritiktir; artık var olmayan bileşenler için kurallar istemezsiniz.
Seçici Verimliliğini Optimize Edin
Karmaşık seçiciler (.nav ul li a span) tarayıcının değerlendirmesi için basit olanlardan (.nav-link) daha fazla iş gerektirir. Seçicilerin performans etkisi çoğu zaman abartılsa da, seçicilerinizi sade tutmaya değer.
Küçültün ve Sıkıştırın
CSS küçültme (minification), boşlukları, yorumları ve gereksiz karakterleri kaldırır. Ardından Gzip veya Brotli sıkıştırma, aktarılan boyutu %60-80 oranında azaltır. 200KB'lık küçültülmemiş bir CSS dosyası, gzip ile yalnızca 40KB olabilir; bu, mütevazı bağlantılarda bile önemsiz bir indirmedir.
CSS boyutunu, bakım kolaylığı pahasına optimize etmeyin. Agresif CSS küçültmeden elde edilecek performans kazanımlarının tavanı düşüktür ve geliştirici deneyimi ile hata ayıklama süresi açısından maliyeti önemli olabilir.
DivMagic, Performans Öncelikli Bir CSS İş Akışına Nasıl Uyuyor?
CSS ile çalışırken en çok zaman alan konulardan biri, beğendiğiniz web sitelerindeki UI bileşenlerini yeniden oluşturmaktır. Güzel bir buton, iyi tasarlanmış bir gezinme çubuğu veya karmaşık bir kart düzeni görürsünüz ve onu kopyalamak için CSS'i yeniden tersine mühendislikle çözmek için saatler harcarsınız.
Bu sürecin gizli bir maliyeti vardır: Tersine mühendislik sırasında yazdığınız CSS, çoğu zaman orijinalinden daha az verimlidir . Gereksiz kurallar eklersiniz, orijinalin akıllıca kademeli (cascade) yapısını kaçırırsınız veya görsel sonucu eşleştirmeye çalışırken seçicilerinizi aşırı spesifik hale getirirsiniz. Sonuç, elde etmeye çalıştığınız performans kazanımlarını baltalayan şişkin bir CSS'tir.
DivMagic'in iş akışını değiştirdiği yer tam da burasıdır. CSS'i manuel olarak yeniden oluşturmak yerine DivMagic, herhangi bir web sitesinden tam UI öğesini, CSS'iyle birlikte doğrudan kopyalamanızı sağlar. Çıktı, orijinal sitenin kullandığı gerçek, üretim kalitesinde CSS'tir; bir yaklaşım değil.
"UI'i tersine mühendislikle çözmeyi bırakın. Herhangi bir web sitesinden tam CSS'i kopyalayın ve üretim kalitesinde stilleri saatler değil, saniyeler içinde gönderin."
Performans faydası iki yönlüdür: CSS yazmak için daha az zaman harcarsınız ve gönderdiğiniz CSS daha temiz ve daha verimlidir çünkü el yazımı bir yaklaşım değil, orijinal optimize edilmiş stil sayfasıdır.
Kopyalamadan Önbelleğe Alınabilir Hale: Pratik Bir İş Akışı
İşte DivMagic ile GitHub'ın "daha fazla CSS gönder" stratejisini birleştiren pratik bir iş akışı:
Adım 1: Referans sitelerden UI bileşenlerini kopyalamak için DivMagic'i kullanın. İhtiyacınız olan her öğe için tam HTML ve CSS'yi çıkarın.
Adım 2: Kopyalanan stilleri tek ve tutarlı bir stil sayfasında birleştirin. Bunları mantıksal olarak düzenleyin, çakışmaları çözün ve tutarlı adlandırma kuralları sağlayın.
Adım 3: PurgeCSS veya framework'ünüzün yerleşik araçlarını kullanarak kullanılmayan kuralları temizleyin. Projenizde aktif olarak kullanılmayan her şeyi kaldırın.
Adım 4: Birleştirilmiş CSS'yi, güçlü önbellek başlıkları (Cache-Control: public, max-age=31536000, immutable sürümlendirilmiş dosyalar için) ile tek bir dosya olarak sunun.
Adım 5: HTTP/2 ve Brotli sıkıştırmasını destekleyen bir CDN arkasına dağıtın.
Bu iş akışı her iki dünyanın da en iyisini sunar: sıfırdan yazmak zorunda olmadığınız üretim kalitesinde CSS gönderirsiniz ve bunu, GitHub'ın verilerinin tekrar ziyaretler için en hızlı olduğunu kanıtladığı önbellek stratejisini kullanarak sunarsınız.
Kendi Projelerinizdeki Etkiyi Ölçmek
GitHub'ın yaklaşımının sizin özel projeniz için işe yarayıp yaramadığını bilmenin tek yolu onu ölçmektir. Neyse ki, bunu yapmak için kullanılan araçlar yaygın olarak mevcuttur ve uygulaması basittir.
Gerçek Kullanıcı İzleme (RUM)
Google Analytics, Sentry Performance ve New Relic Browser gibi araçlar, Core Web Vitals hakkında gerçek kullanıcı verileri sağlar. Hem ilk kez gelen hem de tekrar gelen ziyaretçiler için FCP, TTI ve CLS'yi takip edin. Tekrar ziyaretçi metrikleri, önbelleğe alınmış bir CSS stratejisinden en çarpıcı farkı göreceğiniz yerdir.
Sentetik Test
Lighthouse, WebPageTest ve benzeri araçlar kontrollü, tekrarlanabilir ölçümler sağlar. Tekrar ziyaretlerin önbellek davranışını yakalamasalar da, bariz darboğazları belirlemek ve CSS dağıtım stratejinizin amaçlandığı gibi çalıştığını doğrulamak için kullanışlıdırlar.
CSS Dağıtım Stratejilerinin A/B Testi
En titiz yaklaşım, farklı CSS dağıtım stratejilerini A/B test etmektir. Kullanıcılarınızın yarısına geleneksel satır içi kritik CSS yaklaşımını, diğer yarısına ise tek bir önbelleğe alınmış dosyayı sunun ve ardından RUM metriklerini karşılaştırın. Bu, tahmin yürütmeyi ortadan kaldırır ve size kullanıcı tabanınıza özgü veriler sağlar.
CSS Performansının Geleceği
GitHub'ın bulguları, ön uç topluluğunun performans hakkında düşünme biçimindeki daha geniş bir değişimin parçasıdır. Baytları mikro düzeyde optimize etme dönemi, yerini önbelleğe almayı, istek sayısını ve kullanıcının birden çok ziyaret boyunca toplam deneyimini önceliklendiren daha bütünsel bir bakış açısına bırakıyor.
Bu evrimi destekleyen birkaç eğilim var:
- HTTP/3 ve QUIC: HTTP protokollerinin bir sonraki nesli, bireysel isteklerin yükünü daha da azaltarak "daha az, daha büyük istekler" stratejisini daha da avantajlı hale getiriyor
- Geliştirilmiş tarayıcı önbelleklemesi: Tarayıcılar önbellekleme davranışlarında daha karmaşık hale geliyor ve önbellek-ilk stratejilerini daha güvenilir kılıyor
- CDN yaygınlığı: İçerik dağıtım ağları artık standart altyapı haline geldi ve uçta önbelleğe alınan varlıkların sunulmasını önemli ölçüde hızlandırıyor
- CSS-in-JS evrimi: styled-components ve Emotion gibi framework'ler statik çıkarmaya doğru ilerliyor ve CSS ile JavaScript optimizasyonu arasındaki çizgiyi bulanıklaştırıyor
Sonuç: Daha Hızlı CSS'ye Sezgisel Olmayan Yol
GitHub'ın "daha fazla CSS gönder" keşfi, performans optimizasyonunun nadiren göründüğü kadar basit olduğunun bir hatırlatıcısıdır. Geleneksel bilgelik, kritik CSS'yi satır içine al, stil sayfalarını kod böl, her baytı en aza indir, farklı kısıtlamalar ve farklı tarayıcılar çağında ortaya çıktı. Modern web'de, HTTP/2, gelişmiş önbellekleme ve yaygın CDN'lerle birlikte, hesaplama değişti.
Önemli çıkarım, şişkin CSS göndermeniz gerektiği değil. CSS dağıtımının stratejisinin , CSS dosyasının boyutundan daha önemli olduğudur. Tek, iyi organize edilmiş, önbelleğe alınabilir bir stil sayfası, teorik minimumdan daha büyük olsa bile, her istekte satır içi stilleri yeniden gönderen aşırı optimize edilmiş bir sistemden daha iyi bir kullanıcı deneyimi sunabilir.
Ön uç geliştiriciler için sonuçlar özgürleştirici: CSS dağıtımınızı basitleştirin, önbelleğe almaya odaklanın, tekrar ziyaret performansına öncelik verin ve optimizasyon bütçenizi gerçekten önemli olan yerde harcayın. Ve CSS'yi oluşturmaya gelince, DivMagic gibi araçlar, genellikle başlangıçta şişkinliğe neden olan saatlerce süren manuel tersine mühendisliği ortadan kaldırır.
Daha fazla CSS gönderin. Sadece akıllıca gönderin.
