Ömer Özbay
Rust WebAssembly
Rust WebAssembly

Rust ile WebAssembly: Tarayıcıda Native Performans

1 Nisan 2026 10 dk okuma 1.2K görüntülenme

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 -Oz ile binary boyutunu optimize edin
  • Gereksiz feature'ları Cargo.toml'den kaldırın
  • --target web yerine --target bundler kullanın
  • String geçişlerinde js_sys::Reflect kullanmaktan 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.

Faydalı buldunuz mu? Bu içeriği kendi ağınızla paylaşarak bana destek olabilirsiniz.