🔥

Svelte

Sanal DOM'u ortadan kaldıran, reaktif ve derlenmiş web uygulamaları oluşturmaya yarayan devrim niteliğinde bir araç.

📅 2016
👤 Rich Harris
📦 5.x
📄 MIT

Öne Çıkan Özellikler

🚀

Sanal DOM Yok

Svelte bir derleyicidir. Kodunuzu tarayıcıda çalışan optimize edilmiş saf (vanilla) JavaScript'e çevirir, böylece Sanal DOM yükü olmaz.

⚡

Gerçekten Reaktif

JavaScript'in $ etiket sözdizimini ($:) kullanarak değişkenlerin birbirine reaktif olarak bağlanmasını sağlar.

📝

Daha Az Kod

Geleneksel framework'lere göre aynı işi çok daha az satır kodla yapmanızı sağlayarak hata payını düşürür.

🎨

Kapsamlı Stiller

Bileşen içindeki CSS kuralları varsayılan olarak sadece o bileşene etki eder (scoped CSS).

🎬

Dahili Animasyonlar

Svelte, elementlerin giriş ve çıkış animasyonları için kullanıma hazır transition direktifleri sunar.

📦

SvelteKit

Svelte üzerine kurulu, modern ve tam teşekküllü (full-stack) bir framework ile sunucu tarafı renderlama, yönlendirme vb. özellikleri barındırır.

Avantajlar ve Dezavantajlar

👍 Avantajlar

  • Küçücük bundle (paket) boyutu
  • Çalışma zamanı (runtime) yükü olmaması
  • Daha az boilerplate kod, temiz sözdizimi
  • Öğrenmesi ve uygulaması kolay
  • Dahili animasyon ve geçiş efektleri
  • Bileşene özgü (scoped) CSS desteği

👎 Dezavantajlar

  • React ve Vue'ya göre daha küçük ekosistem
  • Daha az hazır üçüncü parti kütüphane
  • İş piyasasında diğerlerine oranla daha az talep
  • Derlenmiş çıktıda hata ayıklamanın (debugging) bazen zor olması
  • Topluluğun nispeten daha yeni olması

Canlı Demolar

Aşağıdaki demolar Svelte'in çalışma mantığını gösterir.

1. Basit Sayaç (Svelte REPL Embed)

Svelte'de değişkenler reaktiftir. Değişkeni güncellemek DOM'u otomatik olarak günceller.

<script>
  let count = 0;
  
  function increment() {
    count += 1;
  }
</script>

<button on:click={increment}>
  Tıklanma sayısı: {count}
</button>

<style>
  button {
    background: #FF3E00;
    color: white;
    border: none;
    padding: 10px 20px;
    border-radius: 4px;
    cursor: pointer;
  }
</style>

2. Reaktif Bildirimler (Simülasyon)

Svelte'in $: sözdizimi ile türetilmiş durumlar kolayca tanımlanır. Aşağıdaki demo Svelte'in reaktivite mantığını Vanilla JS ile simüle etmektedir.

Çarpan Etkisi (Sayı x 2): 4
Toplam Durum: Küçük
<script>
  let count = 2;
  
  // Reaktif değişkenler (Svelte otomatik hesaplar)
  $: doubled = count * 2;
  $: status = doubled > 10 ? 'Büyük' : 'Küçük';
</script>

<input type="number" bind:value={count} />

<p>Çarpan Etkisi: {doubled}</p>
<p>Toplam Durum: {status}</p>

3. Döngüler ve Geçiş Animasyonları

Svelte, diziler üzerinde dönmek için {#each} blokları kullanır ve transition: direktifi ile çok kolay animasyonlar eklenebilir.

<script>
  import { fade, slide } from 'svelte/transition';
  
  let newTodo = '';
  let todos = [
    { id: 1, text: 'Svelte öğren' },
    { id: 2, text: 'Komponent oluştur' }
  ];
  
  function addTodo() {
    if (!newTodo) return;
    todos = [...todos, { id: Date.now(), text: newTodo }];
    newTodo = '';
  }
  
  function removeTodo(id) {
    todos = todos.filter(t => t.id !== id);
  }
</script>

<input bind:value={newTodo} placeholder="Görev ekle..." />
<button on:click={addTodo}>Ekle</button>

<ul>
  {#each todos as todo (todo.id)}
    <li in:fade out:slide>
      {todo.text}
      <button on:click={() => removeTodo(todo.id)}>X</button>
    </li>
  {/each}
</ul>

4. Svelte vs React Kod Karşılaştırması

Aynı bileşenin Svelte ve React ile yazılmış halleri. Svelte'in ne kadar az boilerplate koda ihtiyaç duyduğuna dikkat edin.

🔥 Svelte (12 Satır)

<script>
  let name = 'Dünya';
</script>

<input bind:value={name}>
<h1>Merhaba {name}!</h1>

<style>
  h1 { color: #FF3E00; }
</style>

⚛️ React (17 Satır)

import { useState } from 'react';
import './styles.css';

export default function App() {
  const [name, setName] = useState('Dünya');
  
  return (
    <div>
      <input 
        value={name} 
        onChange={(e) => setName(e.target.value)} 
      />
      <h1 className="title">Merhaba {name}!</h1>
    </div>
  );
}

Kullanım Senaryoları (Use Cases)

Performans Kritik Uygulamalar

Sanal DOM olmadığı için düşük güçlü cihazlarda bile son derece akıcı çalışır.

Gömülü Bileşenler (Widgets)

Geleneksel CMS'ler üzerine veya farklı sistemlere entegre edilecek bağımsız bileşenler için idealdir (Çalışma zamanı kütüphanesi olmadan derlenir).

İnteraktif Veri Görselleştirmeleri

The New York Times tarafından geliştirildiği için, yoğun veri görselleştirme ve grafik ekranlarında sıklıkla tercih edilir.

Sunucusuz (Serverless/Edge) Uygulamalar

Çıktı boyutu çok küçük olduğu için edge fonksiyonlarında ve serverless yapılarda hızlı yükleme süreleri sağlar.