JavaScript'in gücü inkar edilemez, ancak bazı işlemler için native performansa ihtiyaç duyarsınız. WebAssembly (Wasm) bu noktada devreye giriyor. Rust ile birlikte kullanıldığında ise tarayıcıda neredeyse native hızda çalışan kodlar yazabilirsiniz.
Neden Rust + WebAssembly?
Rust, memory safety garantileri ve sıfır maliyetli soyutlamalarıyla WebAssembly için ideal bir dil. C++'ın gücünü, JavaScript'in erişilebilirliğiyle birleştiriyor.
- Memory Safety: Borrow checker sayesinde dangling pointer ve buffer overflow gibi hatalar derleme zamanında yakalanır.
- Zero-Cost Abstractions: Yüksek seviyeli kod yazın, düşük seviyeli performans alın.
- Küçük Binary Boyutu: wasm-opt ile binary boyutlarınızı önemli ölçüde küçültebilirsiniz.
İlk WebAssembly Modülünüzü Oluşturun
Öncelikle wasm-pack kurulumunu yapalım:
cargo install wasm-pack # Yeni bir proje oluşturun wasm-pack new hello-wasm cd hello-wasm
src/lib.rs dosyasını düzenleyelim:
use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn greet(name: &str) -> String { format!("Merhaba, {}!", name) } #[wasm_bindgen] pub fn fibonacci(n: u32) -> u64 { match n { 0 => 0, 1 => 1, _ => { let mut a = 0u64; let mut b = 1u64; for _ in 2..=n { let temp = a + b; a = b; b = temp; } b } } }
JavaScript'ten Kullanım
Build işlemi sonrası oluşan dosyaları JavaScript projenize import edin:
import init, { greet, fibonacci } from './pkg/hello_wasm.js'; async function run() { await init(); console.log(greet("Dünya")); // Merhaba, Dünya! console.log(fibonacci(50)); // 12586269025 } run();
Performans Karşılaştırması
Fibonacci(40) hesaplama süresi:
- JavaScript: ~850ms
- Rust + Wasm: ~12ms
Bu, yaklaşık 70x hız farkı anlamına geliyor. Görüntü işleme, kriptografi veya fizik simülasyonları gibi CPU yoğun işlemlerde bu fark çok daha belirginleşir.
Gerçek Dünya Kullanım Örnekleri
1. Görüntü İşleme
PixiJS veya Sharp gibi kütüphaneler artık WebAssembly backend kullanıyor. Rust ile yazılmış bir görüntü işleme modülü, JPEG decode işlemini JavaScript'ten 20x daha hızlı yapabiliyor.
2. Oyun Motorları
Bevy Engine gibi Rust tabanlı oyun motorları WebAssembly'e compile olarak tarayıcıda 60 FPS oyun deneyimi sunuyor.
3. Veri Doğrulama
Karmaşık regex pattern'leri veya JSON schema validation işlemleri WebAssembly ile mikrosaniyeler içinde tamamlanabiliyor.
Optimizasyon İpuçları
wasm-opt -Ozile binary boyutunu optimize edin- Gereksiz feature'ları
Cargo.toml'den kaldırın --target webyerine--target bundlerkullanın- String geçişlerinde
js_sys::Reflectkullanmaktan kaçının
Sonuç
WebAssembly, JavaScript'in sınırlarını aşmak için güçlü bir araç. Rust ile birleştiğinde ise hem güvenli hem de son derece performanslı kodlar yazabilirsiniz. Her projede gerekli olmasa da, CPU yoğun işlemler için mutlaka değerlendirilmeli.