Code Splitting Nedir? Bundle Boyutu Nasıl Azalır?
Code splitting, tek bir büyük JavaScript paketini daha küçük ve anlamlı parçalara bölerek yalnızca gerektiği anda yükleme yaklaşımıdır. Mesele yalnızca dosya boyutunu düşürmek değil, kullanıcının ilk anda ihtiyacı olmayan kodu başlangıç yükünün dışına çıkarabilmektir.
Küçük projelerde tek paket yaklaşımı sorun çıkarmaz. Dosya boyutu sınırlı, sayfa sayısı az, özellikler kontrollü. Proje büyüdükçe ne oluyor? Aynı paketin içine yönetim ekranları, raporlama araçları, nadir kullanılan modüller, medya işleyiciler ve üçüncü taraf entegrasyonlar dolmaya başlıyor. Kullanıcı ana sayfayı açarken belki asla ihtiyaç duymayacağı 400KB kodu da indiriyor.
Parçalama işte bu noktada devreye giriyor.
Amaç mimariyi gösterişli hale getirmek değil, kullanıcıya ilk anda gerçekten gereken yükü vermek. Doğru yerde uygulandığında ilk açılış hafifliyor, ayrıştırma süresi kısalıyor, etkileşim daha canlı hissettiriyor.
Hangi problemi çözer?
Başlangıca yığılmış gereksiz kod. Tarayıcı büyük paketi indiriyor, ayrıştırıyor, çalıştırıyor. Mobil cihazlarda bu süreç hissedilir maliyet üretiyor: boşluk, geç görünüm, ağır etkileşim. Yalnızca ağ tasarrufu değil, iş parçacığını rahatlatma yöntemi olarak da işe yarıyor. Core Web Vitals tarafına dolaylı etkisi var.
En mantıklı bölme türleri nelerdir?
Rota bazlı bölme
Blog yazısı sayfası ile yönetim paneli aynı anda gelmek zorunda mı? Hayır. Farklı sayfa tipleri yalnızca ziyaret edildiğinde yüklensin. Çoğu projede ilk uygulanması gereken model bu.
Özellik bazlı bölme
Aynı sayfada bulunan ama herkes tarafından kullanılmayan özellikler: dışa aktarma, ağır filtreleme, grafik modülleri, gelişmiş editörler, medya araçları. Kullanıcı tetiklemeden o kod gelmesin.
Etkileşim bazlı bölme
Modal, sekme, açılır panel, analiz aracı. İlgili etkileşim olduğunda yüklensin. Kalabalık arayüzlerde faydalı.
button.addEventListener('click', async () => {
const { openPanel } = await import('./panel.js');
openPanel();
});
Parçalamak her zaman daha iyi midir?
Değil.
Aşırı küçük parçalara bölünmüş yapı çok fazla istek, karmaşık yükleme düzeni ve bakım zorluğu yaratıyor. Mümkün olan en çok parça üretmek amaç değil. Mantıklı yükleme sınırları kurmak amaç. Her sayfada zaten kullanılan ortak modülleri zorla ayırmak mantıklı değil.
Çok parçalı yapılarda önbellek davranışı kritik hale geliyor. Parçaları ayırdınız ama doğru saklamıyorsanız kazanım sınırlı kalıyor.
Hangi modüller iyi adaydır?
Grafik kütüphaneleri, harita bileşenleri, zengin editörler, medya işleme araçları, raporlama katmanları, nadir kullanılan ağır üçüncü taraf entegrasyonlar. Sadece büyük oldukları için değil, herkese aynı anda gerekli olmadıkları için ayırın.
Bazen daha hafif alternatif seçmek parçalamaktan daha etkili oluyor. Dosya küçültme ile parçalama kararları birbirini tamamlıyor.
Yanlış uygulandığında ne olur?
Aşırı hevesli parçalama kullanıcıyı her küçük etkileşimde yeni dosya beklemeye zorluyor. Ekip hangi modülün neden ayrıldığını açıklayamıyorsa mimari karmaşıklaşıyor. Sorun tek paketken de var, kontrolsüz parçalamada da. İkisinin ortası doğru nokta.
Uygulanabilir karar sırası
- En ağır paketleri ve en seyrek kullanılan modülleri bulun.
- Rota bazlı doğal sınırları çıkarın.
- Etkileşim sonrası çağrılabilecek özellikleri ayırın.
- Değişiklik sonrası ilk açılış ve etkileşim hissini yeniden ölçün.
İyi parçalama çalışması sonunda yalnızca paket küçülmüyor. İlk ekran daha erken geliyor, tarayıcı daha az yoruluyor, kullanıcı başlangıçta daha hafif bir deneyim yaşıyor. Ekip hangi kodun neden ilk pakette olduğunu daha bilinçli tartışmaya başlıyor.
Performansın kalıcı tarafı tam olarak bu.
Bu yaklaşım en çok nerede değer üretir?
Birden fazla sayfa tipi olan projelerde büyük fark yaratıyor. Yönetim ekranlarıyla herkese açık sayfalar aynı kod tabanında, grafik ve editör gibi ağır bileşenler var. Bu yapılarda herkesin ihtiyacı aynı değil. Tek paket yaklaşımı farklı kullanıcı yolculuklarını tek torbada toplamaya çalışıyor.
İçerik sitesiyle panel aynı uygulamada mı yaşıyor? Ziyaretçi yazı okurken yönetim aracını indirmemeli.
Ne zaman gereğinden fazla parçalanmış olunur?
Küçük bir etkileşim için bile sürekli yeni dosya bekleniyor mu? Ağ istekleri gereksiz kalabalıklaşıyor mu? Ekip hangi parçanın neden ayrıldığını açıklayamıyor mu?
Parçalama seviyesi fazla agresif olabilir.
İyi parçalama sadece paket boyutunu değil yapının açıklanabilirliğini de iyileştiriyor. Mimari daha anlaşılır hale gelmiyorsa gereğinden fazla parçalama yapılmış olabilir.
Doğru sonucu aldığınızı nasıl anlarsınız?
İlk paket belirgin biçimde hafifliyor. Kullanıcı ilk içeriğe daha çabuk ulaşıyor. Ayrılan modüller gerçekten ihtiyaç anında devreye giriyor. Ekip yeni modül eklerken hangi kodun ilk pakete gireceğini daha bilinçli tartışmaya başlıyor.
Performans çalışması artık mimari olgunluğa dönüşmüş demek.
Gerçek kazanım yalnızca daha az kilobayt değil, daha net paket sınırları.
Pratik etkisi
Parçalama kararının en büyük değeri ekibi "bu kod gerçekten ilk anda gerekli mi" sorusuna alıştırması. Bu refleks yerleştikten sonra yeni özellikler yalnızca fonksiyon listesi üzerinden değil, ilk ekran bütçesine etkisi üzerinden de tartışılır. Böylece performans çalışması tek seferlik temizlik değil, mimari karar mekanizmasının bir parçası haline gelir.
En çok kazanım üreten örneklerin başında rota kümeleri gelir. Herkese açık sayfalar, yönetim ekranları ve raporlama akışları aynı uygulama içinde yaşıyorsa bunları tek paket altında tutmak neredeyse her zaman gereksiz yük üretir. Ziyaretçi blog yazısını okurken veri dışa aktarma modülünü, grafik kütüphanesini veya tablo sanallaştırma katmanını taşımamalı. Buna karşılık navigasyon, temel form davranışları ve sayfanın ilk anda görünmesi için gereken küçük ortak yardımcılar ilk pakette kalabilir.
Bir diğer kritik ayrım da ortak bağımlılıkların nasıl gruplanacağıdır. Aynı üçüncü taraf kütüphane üç farklı rotada kullanılıyor diye onu rastgele üç parçaya bölmek iyi sonuç vermez. Bu durumda tarayıcı aynı mantığı farklı dosyalardan tekrar tekrar çözmeye uğraşır. Doğru yaklaşım, sık kullanılan ortak katmanı tek bir paylaşılan parça halinde tutup sadece seyrek kullanılan ağır özellikleri ayrı yüklemektir. Özellikle tarih işleme, editör, grafik ve harita tarafında bu ayrım doğrudan CPU maliyetini etkiler.
İşin doğrulama tarafı da nettir. Değişiklikten sonra yalnızca derleme raporundaki kilobayt düşüşüne bakılmaz; Network panelinde ilk yük sırasında hangi dosyaların indiğine, Performance kaydında ayrıştırma ve yürütme süresinin kısalıp kısalmadığına da bakılır. İlk paket küçülmüş ama kullanıcı bir sekmeye tıkladığında 700 milisaniye boyunca boş bekliyorsa, maliyet sadece başka ana taşınmış demektir. Bu yüzden parçalama kararı her zaman rota geçişi, ilk etkileşim ve ikinci ziyaret önbelleğiyle birlikte değerlendirilmelidir.
Uzun yaşayan projelerde bakım tarafı da en az hız kadar önemlidir. İçeriği değişmeyen bir ortak parçanın hash'i sabit kalıyorsa tarayıcı onu yeniden indirmez; sadece değişen modül güncellenir. Bu davranış, iyi bir önbellekleme politikasıyla birleştiğinde her dağıtımın bütün uygulamayı sıfırdan taşımamasını sağlar. Böylece code splitting yalnızca ilk açılışı hafifletmez; yayın sonrası güncellemelerin kullanıcıya yansıma maliyetini de düşürür.
Asıl değer burada ortaya çıkar: daha küçük ilk yük, daha açıklanabilir paket sınırları ve büyüdükçe kontrolü kaybolmayan bir kod tabanı. Parçalama tek başına mucize değildir; fakat doğru rota sınırları, mantıklı ortak paketler ve ölçülmüş etkileşim noktalarıyla birleştirildiğinde hem kullanıcı deneyimini hem ekip disiplinini belirgin biçimde iyileştirir.