Vite ile webpack arasındaki temel fark nedir? Tree shaking nasıl çalışır, neden bazen çalışmaz?
Cevap
webpack geliştirme sırasında da tüm uygulamayı bundle'lar; proje büyüdükçe başlangıç ve HMR yavaşlar. Vite ise geliştirmede bundle yapmaz: kaynak dosyaları tarayıcıya native ES module olarak sunar, sadece istenen dosyayı anında dönüştürür ve node_modules bağımlılıklarını önceden paketler. Production build'de ise optimize bir bundle üretir. Vite 7'ye kadar dev'de esbuild, build'de Rollup kullanılıyordu; Vite 8 (Mart 2026) ile ikisinin yerini Rust tabanlı tek bundler Rolldown aldı.
| webpack | Vite | |
|---|---|---|
| Dev server | Önce bundle, sonra sun | Native ESM, isteğe bağlı dönüşüm |
| Başlangıç | Projeyle büyür | Neredeyse sabit |
| HMR | Bundle'ın parçasını yeniden oluşturur | Sadece değişen modül |
| Konfigürasyon | Esnek ama karmaşık (loader/plugin) | Mantıklı varsayılanlar |
| Ekosistem | Çok olgun, Module Federation | Hızla büyüyen, Rollup uyumlu eklentiler |
Rspack (webpack uyumlu, Rust) ve Turbopack (Next.js 16'da varsayılan) de alternatiflerdir.
Tree shaking
Bundler, ES module import/export ifadelerini statik analiz ederek hiç kullanılmayan export'ları çıktıdan atar.
import { debounce } from "lodash-es"; // sadece debounce dahil edilir
import _ from "lodash"; // CommonJS: tüm kütüphane gelirNeden çalışmaz?
- Kütüphane CommonJS (
require) ile yayınlanmışsa statik analiz yapılamaz. - Side effect'ler: Modülün en üst seviyesinde global'i değiştiren kod varsa bundler onu silmeye cesaret edemez. Kütüphaneler
package.json'da"sideEffects": false(veya CSS dosyaları gibi bir liste) belirtmelidir. import * as utilsve dinamik erişim (utils[name]) analizi bozar.- Barrel dosyaları (
index.tsher şeyi re-export eder) bazı araçlarda gereksiz modülleri çekip build'i yavaşlatır. - Babel'in ESM'i CommonJS'e çevirmesi (
modules: "commonjs").
Bundle içeriğini rollup-plugin-visualizer veya webpack-bundle-analyzer ile doğrulayın.
İlgili Web Performansı soruları
- Bundle boyutunu nasıl analiz eder ve küçültürsünüz?
- Çok uzun bir listeyi (on binlerce satır) performanslı nasıl gösterirsiniz?
- Bir web sayfasının yükleme performansını nasıl iyileştirirsiniz?
- Core Web Vitals nedir? LCP, INP ve CLS neyi ölçer?
- preload, prefetch, preconnect ve dns-prefetch resource hint'leri arasındaki fark nedir?
- INP değeriniz kötü. Yavaş etkileşimleri nasıl bulur ve düzeltirsiniz?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.