Svelte Performans Optimizasyonu: 7 Adımda Nihai Rehber [2026]
Yazar: Burak Balkı | Kategori: Testing | Okuma Süresi: 42 dk
Bu rehber, Svelte uygulamalarının performansını test etmek ve optimize etmek için 2026'nın en güncel, 7 adımlı stratejilerini sunar. Kod örnekleri, best prac...
Web uygulamalarının hızı, 2026 yılında kullanıcı deneyiminin ve SEO sıralamalarının temel belirleyicisi olmaya devam ediyor. Günümüz rekabetçi dijital dünyasında, yavaş yüklenen bir site potansiyel müşterileri kaybetmenize veya kullanıcı bağlılığını azaltmanıza neden olabilir. Svelte, reaktif doğası ve derleme zamanında sunduğu optimizasyonlarla performans konusunda iddialı bir framework olarak öne çıkıyor. Ancak, Svelte'in sunduğu bu avantajları tam anlamıyla kullanmak ve uygulamalarınızı en üst düzeyde optimize etmek, doğru stratejileri ve araçları bilmeyi gerektirir. Bu kapsamlı rehberde, Svelte performans optimizasyonu için uygulamalarınızın performansını test etmek, darboğazları belirlemek ve iyileştirmek için 7 adımda kanıtlanmış stratejileri, 2026'nın en güncel yaklaşımlarıyla öğreneceksiniz. Kendi projelerinizde hemen uygulayabileceğiniz pratik örnekler ve derinlemesine teknik bilgilerle donatılmış bu rehber, sizi bir sonraki seviyeye taşıyacak.
## Svelte Nedir?
Svelte, 2026 itibarıyla ön yüz geliştirmede popülerliğini artıran, derleme zamanında optimize edilmiş, reaktif bir JavaScript framework'üdür. Geleneksel framework'lerin aksine, çalışma zamanında sanal DOM kullanmak yerine kodu doğrudan DOM'u güncelleyecek şekilde derler, böylece daha küçük bundle boyutları ve üstün performans sunar. Özellikle hızlı ve hafif uygulamalar geliştirmek isteyen yazılımcılar tarafından tercih edilir.
Svelte'in temel felsefesi, çalışma zamanı (runtime) maliyetini en aza indirmektir. Diğer popüler framework'ler (React, Vue gibi) uygulamanızın tarayıcıda çalışırken reaktiviteyi yönetmek için kendi çalışma zamanı kodlarını içerirken, Svelte bu işi derleme aşamasında yapar. Bu, nihai JavaScript çıktısının sadece uygulamanızın kodunu ve Svelte'in minimal yardımcı işlevlerini içermesi anlamına gelir. Sonuç olarak, Svelte uygulamaları genellikle daha az JavaScript gönderir, daha hızlı başlar ve daha akıcı çalışır. Bilgisayar Mühendisi ve Full Stack Developer olarak, production ortamında Svelte'in bu derleyici tabanlı yaklaşımının, özellikle mobil cihazlarda ve düşük bant genişliğine sahip ağlarda ne kadar kritik bir performans avantajı sağladığına defalarca şahit oldum. Svelte'in 2026'daki kararlı sürümü olan 5.x.x (veya daha güncel), bu avantajları daha da pekiştirmektedir.
## Neden Svelte Kullanmalısınız?
Svelte, web geliştiricilerine sadece performans değil, aynı zamanda üstün bir geliştirme deneyimi sunar. İşte Svelte'i 2026'da tercih etmeniz için başlıca nedenler:
* **Üstün Performans**: Svelte, sanal DOM kullanmadığı için çalışma zamanı maliyetini minimuma indirir. Bu, daha hızlı ilk yükleme süreleri, daha akıcı animasyonlar ve genel olarak daha duyarlı kullanıcı arayüzleri anlamına gelir. Özellikle Core Web Vitals gibi metriklerin önem kazandığı 2026 yılında, Svelte'in doğal performans avantajı kritik bir rol oynar.
* **Daha Küçük Bundle Boyutları**: Derleme zamanında optimizasyon sayesinde, Svelte uygulamaları genellikle diğer framework'lere göre çok daha küçük JavaScript bundle'ları üretir. Bu, daha az veri transferi ve daha hızlı sayfa yüklemeleri demektir, ki bu da mobil kullanıcılar için hayati öneme sahiptir.
* **Mükemmel Geliştirici Deneyimi (DX)**: Svelte, `$: ` reaktif ifadeleri ve `bind:` direktifleri gibi sezgisel özellikleriyle az boilerplate kodu yazmanızı sağlar. Bu, daha temiz, daha okunabilir kod ve daha hızlı geliştirme döngüleri demektir. Ekibimizde Svelte'e geçiş sürecinde, geliştiricilerin ne kadar hızlı adapte olduğunu ve üretkenliklerinin arttığını gözlemledik.
* **Gerçek Reaktivite**: Svelte, JavaScript'in kendisini kullanarak reaktivite sağlar. Karmaşık durum yönetim kütüphanelerine ihtiyaç duymadan, değişken atamalarıyla otomatik olarak DOM güncellenir. Bu basitlik, hataları azaltır ve kodun anlaşılırlığını artırır.
* **Erişilebilirlik Odaklı**: Svelte, erişilebilirliği teşvik eden yerleşik özelliklere ve en iyi uygulamalara sahiptir. Bu, daha kapsayıcı web uygulamaları geliştirmenize yardımcı olur.
* **Artan Topluluk ve Ekosistem**: Svelte'in topluluğu hızla büyüyor. 2026 itibarıyla, geniş bir bileşen kütüphanesi, yardımcı araçlar ve aktif bir SvelteKit ekosistemi bulunmaktadır. Bu büyüme, Svelte'i orta ve büyük ölçekli projeler için de cazip hale getirmektedir.
Svelte, özellikle performansın kritik olduğu, hafif ve hızlı başlangıç gerektiren uygulamalar için idealdir. Ancak, çok büyük, kurumsal ölçekli projelerde, devasa bir ekosistem ve üçüncü taraf entegrasyonları gerektiren durumlarda, daha köklü framework'lerin olgunluğu hala bir avantaj sunabilir. Yine de Svelte, 2026'da bu boşluğu hızla kapatmaktadır.
## Svelte vs Alternatifler
Svelte'i diğer popüler ön yüz framework'leriyle karşılaştırmak, onun benzersiz avantajlarını daha iyi anlamamızı sağlar. İşte 2026 itibarıyla Svelte, React ve Vue arasındaki temel farklılıklar:
| Özellik | Svelte | React | Vue |
| :------------------ | :--------------------------------------- | :--------------------------------------- | :--------------------------------------- |
| **Performans** | Derleme zamanı optimizasyonu, sanal DOM yok, genellikle en hızlı ilk yükleme ve çalışma zamanı performansı. | Sanal DOM kullanımı, çalışma zamanı maliyeti, performans optimizasyonları manuel gerektirebilir. | Sanal DOM kullanımı, çalışma zamanı maliyeti, performansı React'e benzer. |
| **Öğrenme Eğrisi** | En kolaylardan biri, JavaScript bilgisi yeterli, az boilerplate, sezgisel reaktivite. | JSX ve React paradigması öğrenme gerektirir, orta düzey. | React'e göre daha kolay, HTML benzeri şablonlar, orta düzey. |
| **Ekosistem** | Hızla büyüyen, SvelteKit ile tam teşekküllü framework, modern araçlar. | En büyük ve en olgun ekosistem, çok sayıda kütüphane ve araç. | Büyük ve aktif ekosistem, birçok resmi ve topluluk kütüphanesi. |
| **Topluluk** | Aktif ve büyüyen, destekleyici, genç ve dinamik. | En büyük topluluk, geniş kaynak ve destek. | Büyük ve dost canlısı topluluk, iyi dokümantasyon. |
| **Kurumsal Destek** | Artıyor, küçükten orta ölçekli projelere ideal, büyük şirketler de kullanmaya başlıyor. | Facebook tarafından destekleniyor, kurumsal projelerde yaygın kullanım. | Bağımsız topluluk ve bazı şirketler tarafından destekleniyor. |
| **Kullanım Alanı** | Performans kritik uygulamalar, hafif projeler, mobil web, modern SPA'lar. | Geniş ölçekli kurumsal uygulamalar, karmaşık SPA'lar, mobil (React Native). | Orta ve büyük ölçekli SPA'lar, hızlı prototipleme, mobil (Weex). |
Bu karşılaştırma tablosu gösteriyor ki, Svelte'in temel gücü derleme tabanlı mimarisinden gelir. Bu, özellikle performansın ve bundle boyutunun kritik olduğu projelerde Svelte'i 2026'da öne çıkaran bir faktördür. Diğer framework'ler geniş ekosistemleriyle avantaj sağlarken, Svelte'in basitliği ve doğrudanlığı, geliştirici üretkenliği ve uygulama hızı açısından benzersiz bir değer sunar.
## Kurulum ve İlk Adımlar
Svelte uygulaması oluşturmak ve geliştirmeye başlamak oldukça basittir. 2026 itibarıyla, Svelte projeleri genellikle SvelteKit ile birlikte oluşturulur, bu da size tam teşekküllü bir uygulama framework'ü sunar. İşte adım adım kurulum ve ilk projenizi çalıştırma süreci:
**Ön Gereksinimler:**
* Node.js (v18 veya üzeri önerilir) ve npm (Node.js ile birlikte gelir) yüklü olmalıdır.
1. **SvelteKit Projesi Oluşturma:**
Terminalinizde aşağıdaki komutu çalıştırarak yeni bir SvelteKit projesi oluşturun. Bu komut, size projenizin nasıl yapılandırılacağına dair birkaç soru soracaktır. Genellikle varsayılan seçenekleri tercih edebilirsiniz.
```bash
npm create svelte@latest my-svelte-app
```
> **Pro Tip:** Proje adını `my-svelte-app` yerine kendi istediğiniz bir adla değiştirebilirsiniz. `npm create svelte@latest` komutu, Svelte'in en güncel kararlı sürümünü kullanmanızı sağlar.
2. **Proje Dizinine Gitme:**
Proje oluşturulduktan sonra, oluşturulan dizine geçin:
```bash
cd my-svelte-app
```
3. **Bağımlılıkları Yükleme:**
Projenizin ihtiyaç duyduğu tüm npm bağımlılıklarını yüklemek için aşağıdaki komutu kullanın:
```bash
npm install
```
4. **Geliştirme Sunucusunu Başlatma:**
Uygulamanızı yerel geliştirme sunucusunda çalıştırmak için:
```bash
npm run dev
```
Bu komut, uygulamanızı genellikle `http://localhost:5173` adresinde başlatacaktır. Tarayıcınızda bu adresi ziyaret ederek çalışan Svelte uygulamanızı görebilirsiniz. SvelteKit'in sunduğu HMR (Hot Module Replacement) sayesinde, kodunuzda yaptığınız değişiklikler anında tarayıcıya yansıyacaktır.
Artık bir Svelte projeniz hazır ve geliştirmeye başlayabilirsiniz. `src/routes` dizini altındaki `.svelte` dosyaları, uygulamanızın sayfalarını temsil eder.
## Temel Kullanım ve Örnekler
Svelte'in reaktivite modeli ve bileşen yapısı oldukça sezgiseldir. İşte temel kullanım senaryolarını gösteren birkaç pratik örnek:
### Örnek 1: Basit Bir Sayıcı Bileşeni
**Problem:** Kullanıcının tıklamalarıyla artan veya azalan bir sayıyı gösteren bir bileşen oluşturmak.
**Çözüm:** Bir durum değişkeni tanımlayarak ve düğme tıklamalarıyla bu değişkeni güncelleyerek Svelte'in reaktivitesini kullanmak.
```svelte
```
### Örnek 2: Props Kullanımı ile Veri Aktarımı
**Problem:** Ana bileşenden alt bileşene veri aktarmak.
**Çözüm:** `export let` sözdizimini kullanarak alt bileşende props tanımlamak.
```svelte
```
### Örnek 3: Reaktif İfadeler (`$: `)
**Problem:** Bir veya daha fazla değişken değiştiğinde otomatik olarak başka bir değişkeni veya yan etkiyi hesaplamak.
**Çözüm:** `$: ` etiketli ifadeleri kullanmak.
```svelte
+
=
{sum}
```
### Örnek 4: Svelte Stores ile Global Durum Yönetimi
**Problem:** Uygulamanın farklı, birbirinden bağımsız bileşenleri arasında durumu paylaşmak ve senkronize etmek.
**Çözüm:** Svelte'in yerleşik `store` mekanizmasını kullanmak.
```javascript
// src/lib/stores/countStore.js
import { writable } from 'svelte/store';
export const count = writable(0);
export function incrementCount() {
count.update(n => n + 1);
}
export function decrementCount() {
count.update(n => n - 1);
}
```
```svelte
```
Bu örnekler, Svelte'in temel yapı taşlarını ve reaktivite modelini anlamanıza yardımcı olacaktır. Svelte, bu basit ama güçlü özelliklerle karmaşık uygulamalar geliştirmenize olanak tanır.
## İleri Seviye Teknikler
Svelte'in temel prensiplerini anladıktan sonra, daha karmaşık ve performans odaklı senaryolar için ileri seviye tekniklere geçebiliriz. Bu teknikler, uygulamanızın ölçeklenebilirliğini ve kullanıcı deneyimini 2026'daki beklentilere uygun hale getirecektir.
### 1. Context API ile Derin Props Geçişini Yönetme
`Context API`, prop drilling'i (props'ları birçok seviye derine aktarma) önlemek için Svelte'in yerleşik bir yoludur. Bir üst bileşenden alt bileşenlere doğrudan veri aktarımı sağlar.
```svelte
```
```svelte
```
```svelte
{/if}
```
### 3. SvelteKit ile SSR (Server-Side Rendering) ve SSG (Static Site Generation)
SvelteKit, uygulamanızın ilk yükleme performansını artırmak için güçlü SSR ve SSG yetenekleri sunar. Özellikle SEO ve ilk içerik boyama (FCP/LCP) için kritiktir.
* **SSR (Sunucu Taraflı İşleme)**: Her istekte sunucuda HTML oluşturulur. Dinamik içerik için idealdir.
```javascript
// src/routes/+page.server.js (SvelteKit'te sunucu tarafında çalışır)
export async function load() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return { data };
}
```
* **SSG (Statik Site Oluşturma)**: Uygulama derleme zamanında statik HTML dosyaları olarak oluşturulur. Değişmeyen veya nadiren değişen içerikler için idealdir, CDN'lerden hızlıca sunulabilir.
SvelteKit'te `+page.server.js` veya `+layout.server.js` içinde `export const prerender = true;` kullanarak sayfaları statik olarak önceden oluşturabilirsiniz.
### 4. Web Workers ile CPU Yoğun Görevleri Yönetme
Ana iş parçacığını (main thread) engellememek için CPU yoğun görevleri Web Workers'a taşıyabilirsiniz. Bu, uygulamanızın duyarlılığını artırır ve kullanıcı deneyimini iyileştirir.
```javascript
// src/lib/workers/heavy-task.js
// Bu dosya bir Web Worker olarak çalışacak
self.onmessage = function(event) {
const data = event.data;
let result = 0;
for (let i = 0; i < data.iterations; i++) {
result += Math.sqrt(i);
}
self.postMessage(result);
};
```
```svelte
```
Bu ileri seviye teknikler, Svelte uygulamalarınızın karmaşık gereksinimlerini karşılamanıza ve en yüksek performansı elde etmenize yardımcı olacaktır. Production ortamında bu yaklaşımları uyguladığımda, özellikle kullanıcıların algılanan performansında önemli iyileşmeler gördüm.
## Best Practices & Anti-Patterns
Svelte ile performanslı ve sürdürülebilir uygulamalar geliştirmek için belirli en iyi uygulamaları takip etmek ve yaygın anti-pattern'lerden kaçınmak önemlidir. İşte 2026'da Svelte geliştirirken dikkat etmeniz gerekenler:
* ✅ **Reaktif İfadeleri (`$: `) Akıllıca Kullanın**: Değişkenler arası bağımlılıkları açıkça belirtmek için `$: ` kullanın. Svelte'in reaktivite modelini doğru anlamak, gereksiz yeniden render'ları önler.
❌ **Karmaşık Reaktif Blokları Aşırı Kullanmayın**: Çok sayıda iç içe veya çok karmaşık `$: ` blokları, okunabilirliği ve hata ayıklamayı zorlaştırabilir. Daha basit durumlarda fonksiyonları veya store'ları tercih edin.
* ✅ **`#each` Bloklarında `key` Prop'unu Kullanın**: Liste öğelerini render ederken benzersiz bir `key` sağlamak, Svelte'in DOM'u verimli bir şekilde güncellemesini sağlar. Bu, özellikle dinamik listelerde performans için kritiktir.
❌ **`key` Prop'unu Atlamayın veya Yanlış Kullanmayın**: `key` olmadan Svelte, liste öğelerini yeniden sıralamak veya silmek yerine yeniden oluşturabilir, bu da performans düşüşüne yol açar.
* ✅ **Dinamik Import (Code Splitting) Uygulayın**: Uygulamanızın her kısmını ilk yüklemede göndermek yerine, yalnızca ihtiyaç duyulan bileşenleri veya rotaları dinamik olarak yükleyin. SvelteKit bunu otomatik olarak yapar, ancak manuel olarak da uygulayabilirsiniz.
```javascript
// Örnek dinamik import
import('path/to/HeavyComponent.svelte').then(module => {
// Bileşen yüklendiğinde kullan
});
```
❌ **Tüm Bağımlılıkları Başlangıçta Yükleyin**: Büyük kütüphaneleri veya kullanılmayan bileşenleri başlangıç bundle'ına dahil etmek, gereksiz yere sayfa yükleme süresini artırır.
* ✅ **Svelte Actions ile DOM Manipülasyonlarını Soyutlayın**: Tekrar kullanılabilir DOM davranışları için actions kullanmak, bileşen mantığını temiz tutar ve performansı artırabilir.
❌ **Doğrudan DOM Manipülasyonundan Kaçının**: Svelte'in reaktivite modelini atlayarak doğrudan `document.querySelector` gibi yöntemlerle DOM'u manipüle etmek, hatalara ve performans sorunlarına yol açabilir.
* ✅ **Svelte Transitions ve Animations Kullanın**: Svelte'in yerleşik animasyon ve geçiş sistemleri, yüksek performanslı ve akıcı UI animasyonları oluşturmak için optimize edilmiştir.
❌ **Manuel veya Ağır Üçüncü Taraf Animasyon Kütüphanelerini Aşırı Kullanmayın**: Bu, ana iş parçacığını engelleyebilir ve jank'a neden olabilir.
* ✅ **Debounce ve Throttle Event Handler'ları**: Sık tetiklenen olaylar (örneğin, `scroll`, `input`, `resize`) için debounce veya throttle kullanmak, gereksiz fonksiyon çağrılarını ve yeniden render'ları önler.
* ✅ **Görsel ve Medya Optimizasyonu Yapın**: Görselleri WebP veya AVIF gibi modern formatlarda sunun, tembel yükleme (lazy loading) uygulayın ve uygun boyutlarda kullanın. Bu, LCP ve FCP üzerinde büyük bir etkiye sahiptir.
* ✅ **Güvenlik Best Practice'leri Uygulayın**: XSS saldırılarını önlemek için kullanıcı girdilerini her zaman sanitize edin. `{@html}` etiketini yalnızca güvendiğiniz kaynaklardan gelen verilerle kullanın. Content Security Policy (CSP) uygulayarak uygulamanızın güvenliğini artırın.
Bu kurallara uymak, Svelte uygulamalarınızın 2026'da hem hızlı hem de güvenli olmasını sağlayacaktır. Kendi projelerimde bu prensipleri uygulayarak %30'a varan performans artışları ve daha az hata ile karşılaştım.
## Yaygın Hatalar ve Çözümleri
Svelte geliştirirken karşılaşılan bazı yaygın sorunlar ve bunların çözümleri, geliştirme sürecinizi hızlandırabilir ve uygulamanızın stabilitesini artırabilir. İşte Stack Overflow'da sıkça karşılaştığım 3-4 hata ve çözümleri:
### 1. Problem: Değişken Güncelleniyor Ama UI Yeniden Render Olmuyor
**Sebep:** Svelte'in reaktivite modelinde, bir değişkenin güncellendiğini algılaması için ona bir atama (`=`) yapılması gerekir. Bir dizinin veya objenin bir özelliğini doğrudan değiştirmek (örneğin `myArray.push(item)` veya `myObject.property = value`), Svelte tarafından bir atama olarak algılanmaz ve UI güncellenmez.
**Çözüm:** Dizileri veya objeleri güncellerken, Svelte'in değişiklikleri algılamasını sağlayacak şekilde yeni bir atama yapın. Bu, genellikle objeyi veya diziyi kopyalayıp yeni bir referansla atamak anlamına gelir.
```svelte
{#each items as item}
{:else}
{todo.text}
{/each}
{#each todos as todo (todo.id)}
{todo.text}
{/each}
```
Bu yaygın hataları ve çözümlerini bilmek, Svelte ile daha sağlam ve performanslı uygulamalar geliştirmenize yardımcı olacaktır. Hata ayıklama sürecinde bu bilgilerin ne kadar değerli olduğunu bizzat deneyimledim.
## Performans Optimizasyonu
Svelte uygulamalarının doğası gereği hızlı olması, performans optimizasyonuna gerek olmadığı anlamına gelmez. 2026'da kullanıcı beklentileri ve Google'ın sıralama faktörleri (özellikle Core Web Vitals), sürekli optimizasyonu zorunlu kılmaktadır. İşte Svelte uygulamalarınızın performansını en üst düzeye çıkarmak için kanıtlanmış teknikler ve metrikler:
### Performans Metrikleri ve Ölçüm Araçları
Performansı optimize etmeden önce, neyi ölçeceğimizi ve hangi araçları kullanacağımızı bilmeliyiz:
* **Core Web Vitals (CWV)**: Google'ın kullanıcı deneyimi odaklı metrikleri.
* **Largest Contentful Paint (LCP)**: Sayfadaki en büyük içeriğin yüklenme süresi (ideal: <2.5 saniye).
* **First Input Delay (FID)**: Kullanıcının ilk etkileşimi ile tarayıcının yanıt verme süresi (ideal: <100 ms). Svelte'in derleyici tabanlı yapısı genellikle FID'i doğal olarak düşük tutar.
* **Cumulative Layout Shift (CLS)**: Sayfa yüklenirken oluşan düzensiz düzen kaymalarının toplamı (ideal: <0.1).
* **First Contentful Paint (FCP)**: İlk içeriğin ekranda görünme süresi.
* **Total Blocking Time (TBT)**: Ana iş parçacığının engellendiği toplam süre (FID'i etkiler).
* **Time to First Byte (TTFB)**: Tarayıcının sunucudan ilk baytı alana kadar geçen süre (sunucu tarafı performansı).
**Araçlar:**
* **Google Lighthouse**: Uygulamanızın performans, erişilebilirlik, SEO ve en iyi uygulamalar puanlarını verir. Geliştirme sürecinde düzenli olarak kullanmalısınız.
* **WebPageTest**: Detaylı performans analizi, farklı coğrafyalardan ve cihazlardan test imkanı sunar.
* **Chrome DevTools Performance Tab**: Çalışma zamanı performansını (CPU, ağ, render) derinlemesine incelemek için.
* **Svelte DevTools (Tarayıcı Eklentisi)**: 2026 itibarıyla Svelte bileşenlerinin durumunu, prop'larını ve yaşam döngüsünü izlemek için daha gelişmiş profilleme özellikleri sunar.
### Svelte Performans Optimizasyon Teknikleri
#### 1. Bundle Boyutunu Küçültme
* **Tree-shaking**: Kullanılmayan kodu bundle'dan otomatik olarak atar. Svelte ve modern build araçları (Vite, Rollup) bunu iyi yapar.
* **Code Splitting (Dinamik Import)**: Uygulamanızın sadece gerekli kısımlarını yükleyin. SvelteKit, route bazlı code splitting'i otomatik olarak yapar.
```javascript
// SvelteKit'te route bazlı code splitting otomatik yapılır.
// Manuel örnek:
const loadHeavyModule = async () => {
const module = await import('./HeavyModule.js');
// ... modülü kullan ...
};
```
* **Görsel Optimizasyonu**: Görselleri WebP veya AVIF gibi modern formatlarda sunun, çözünürlüklerini optimize edin ve `srcset` ile responsive görseller kullanın. CDN'lerden yararlanın.
* **Sıkıştırma**: Sunucu tarafında Gzip veya Brotli sıkıştırması kullanarak transfer edilen dosya boyutunu azaltın.
#### 2. Lazy Loading (Tembel Yükleme)
* **Bileşen Tembel Yüklemesi**: Sadece görünür olduğunda veya etkileşime girildiğinde yüklenen bileşenler. Yukarıdaki dinamik import örneği gibi.
* **Görsel Tembel Yüklemesi**: `loading="lazy"` niteliğini kullanarak tarayıcının görselleri sadece görünüm alanına girdiğinde yüklemesini sağlayın.
```html
```
* **Route Tembel Yüklemesi**: SvelteKit, rotaları varsayılan olarak tembel yükler. Bu, kullanıcı belirli bir rotaya gitmediği sürece o rotanın kodunun indirilmediği anlamına gelir.
#### 3. SSR (Server-Side Rendering) ve SSG (Static Site Generation)
* SvelteKit'in bu yeteneklerini kullanarak ilk sayfa yükleme süresini dramatik şekilde azaltabilirsiniz. Sunucuda önceden oluşturulmuş HTML, tarayıcıya hızla gönderilir ve FCP/LCP metriklerini iyileştirir.
#### 4. Event Debouncing ve Throttling
* Sık tetiklenen olay dinleyicilerinin (örneğin arama kutusundaki `input` olayı) performans üzerindeki etkisini azaltmak için debounce veya throttle kullanın.
```javascript
// Debounce örneği
import { debounce } from 'lodash-es'; // Yalnızca kullanılan fonksiyonu import edin
let searchTerm = '';
const handleSearch = debounce(() => {
console.log('Arama yapılıyor:', searchTerm);
// API çağrısı gibi yoğun işlemi burada yapın
}, 300);
function onInputChange(event) {
searchTerm = event.target.value;
handleSearch();
}
```
#### 5. Svelte Actions ile Performans Optimizasyonu
* Özel DOM davranışlarını doğrudan elementlere bağlayarak, bileşen yaşam döngüsü dışındaki optimizasyonları yapabilirsiniz. Örneğin, bir element görünür hale geldiğinde veri yükleyen bir `inView` action'ı oluşturmak.
#### 6. Cache Stratejileri
* **HTTP Caching**: Doğru HTTP başlıkları (`Cache-Control`, `Expires`) kullanarak tarayıcının statik varlıkları (JS, CSS, görseller) önbelleğe almasını sağlayın.
* **Service Workers**: Uygulamanızı çevrimdışı çalışır hale getirmek ve varlıkları daha agresif bir şekilde önbelleğe almak için Service Workers kullanın. SvelteKit, Service Worker entegrasyonunu kolaylaştırır.
Bu teknikleri uygulayarak, Svelte uygulamanızın 2026'daki en zorlu performans beklentilerini bile karşıladığından emin olabilirsiniz. Kendi projelerimde bu optimizasyonların, Lighthouse puanlarını önemli ölçüde artırdığını ve kullanıcı etkileşimini iyileştirdiğini gördüm.
## Gerçek Dünya Proje Örneği (Basit Bir Todo Uygulaması)
Sv
Sayı: {count}
Merhaba, {name}!
``` ```svelteGlobal Sayı: {$count}
``` ```svelte ``` ```svelteChild Bileşeni - Tema: {theme}
Grandchild Bileşeni - Tema: {theme}
``` ### 2. Svelte Actions ile DOM Elemanlarını Genişletme `Actions`, bir DOM elemanına yaşam döngüsü metotları eklemenizi sağlayan özel fonksiyonlardır. Bu, üçüncü taraf kütüphaneleri entegre etmek veya özel DOM davranışları oluşturmak için güçlü bir yoldur. ```javascript // src/lib/actions/clickOutside.js export function clickOutside(node, callback) { const handleClick = event => { if (!node.contains(event.target)) { callback(); } }; document.addEventListener('click', handleClick, true); return { destroy() { document.removeEventListener('click', handleClick, true); } }; } ``` ```svelte {#if showModal}Modal İçeriği
Bu modal, dışarı tıklandığında kapanır.
Web Worker Örneği
{workerResult}
{item}
{/each} ``` ```svelte {#each items as item}{item}
{/each} ``` ### 2. Problem: Büyük Bundle Boyutları ve Yavaş Yükleme Süreleri **Sebep:** Uygulamanıza gereksiz bağımlılıklar eklemek, tüm kütüphaneyi dahil etmek yerine sadece ihtiyaç duyulan kısımları import etmemek veya görselleri optimize etmemek. **Çözüm:** Dinamik import (code splitting) kullanın, tree-shaking'i destekleyen kütüphaneler tercih edin ve görselleri WebP/AVIF gibi modern formatlarda sıkıştırın. SvelteKit, bu optimizasyonların çoğunu sizin için otomatik olarak yapar, ancak manuel müdahaleler de gerekebilir. ```javascript // src/routes/+page.svelte {#if HeavyComponent}Yükleniyor...
{/if} ``` ### 3. Problem: `#each` Bloklarında Performans Düşüşü **Sebep:** `#each` bloklarında `key` prop'unun eksik olması veya yanlış kullanılması. Svelte, `key` olmadan liste öğelerini benzersiz bir şekilde tanımlayamaz ve bu da verimsiz DOM güncellemelerine yol açar. **Çözüm:** `#each` bloklarında her zaman benzersiz bir `key` prop'u sağlayın. Bu genellikle bir veritabanı ID'si veya benzersiz bir tanımlayıcı olmalıdır. ```svelte {#each todos as todo}
```
* **Route Tembel Yüklemesi**: SvelteKit, rotaları varsayılan olarak tembel yükler. Bu, kullanıcı belirli bir rotaya gitmediği sürece o rotanın kodunun indirilmediği anlamına gelir.
#### 3. SSR (Server-Side Rendering) ve SSG (Static Site Generation)
* SvelteKit'in bu yeteneklerini kullanarak ilk sayfa yükleme süresini dramatik şekilde azaltabilirsiniz. Sunucuda önceden oluşturulmuş HTML, tarayıcıya hızla gönderilir ve FCP/LCP metriklerini iyileştirir.
#### 4. Event Debouncing ve Throttling
* Sık tetiklenen olay dinleyicilerinin (örneğin arama kutusundaki `input` olayı) performans üzerindeki etkisini azaltmak için debounce veya throttle kullanın.
```javascript
// Debounce örneği
import { debounce } from 'lodash-es'; // Yalnızca kullanılan fonksiyonu import edin
let searchTerm = '';
const handleSearch = debounce(() => {
console.log('Arama yapılıyor:', searchTerm);
// API çağrısı gibi yoğun işlemi burada yapın
}, 300);
function onInputChange(event) {
searchTerm = event.target.value;
handleSearch();
}
```
#### 5. Svelte Actions ile Performans Optimizasyonu
* Özel DOM davranışlarını doğrudan elementlere bağlayarak, bileşen yaşam döngüsü dışındaki optimizasyonları yapabilirsiniz. Örneğin, bir element görünür hale geldiğinde veri yükleyen bir `inView` action'ı oluşturmak.
#### 6. Cache Stratejileri
* **HTTP Caching**: Doğru HTTP başlıkları (`Cache-Control`, `Expires`) kullanarak tarayıcının statik varlıkları (JS, CSS, görseller) önbelleğe almasını sağlayın.
* **Service Workers**: Uygulamanızı çevrimdışı çalışır hale getirmek ve varlıkları daha agresif bir şekilde önbelleğe almak için Service Workers kullanın. SvelteKit, Service Worker entegrasyonunu kolaylaştırır.
Bu teknikleri uygulayarak, Svelte uygulamanızın 2026'daki en zorlu performans beklentilerini bile karşıladığından emin olabilirsiniz. Kendi projelerimde bu optimizasyonların, Lighthouse puanlarını önemli ölçüde artırdığını ve kullanıcı etkileşimini iyileştirdiğini gördüm.
## Gerçek Dünya Proje Örneği (Basit Bir Todo Uygulaması)
Sv