Tarayıcıda Rust: Leptos ile bir yıl sonra dürüst değerlendirme
Xaron'un arayüzü WebAssembly'ye derlenen Rust. Kazandığım şey tek tip sistemdi; ödediğim fatura ilk yükleme ve ekosistem. İkisini de rakamsız değil, dürüst anlatayım.
Xaron'da sunucu Axum, istemci Leptos — ikisi de Rust, istemci tarafı WebAssembly'ye derleniyor. Bu kararı verirken okuduğum yazıların çoğu ya çok hevesliydi ya da hiç denememiş birinin şüpheciliğiydi. Bir yıl kullandıktan sonra ortadaki yazıyı yazayım.
Kazanç: sınır diye bir şey kalmıyor
En büyük fayda performans değil, tek tip sistem.
Mesaj tipleri, hata biçimleri, doğrulama kuralları tek yerde tanımlı ve iki taraf da aynı tanımı derliyor. Sunucuda bir alanın adını değiştirdiğimde istemci derlenmiyor. Eskiden bu, üretimde fark edilen bir uyumsuzluktu — şimdi bir derleme hatası.
Bunun ne kadar büyük bir fark olduğunu, olmadığında ne kaybettiğinizi görmeden anlamak zor. Şifreleme durumu gibi bir şeyi düşünün: grup durumu, epoch numarası, anahtar paketleri. Bu yapıların istemci ve sunucu tarafında birbirinden bağımsız iki tanımı olsaydı, aradaki en küçük uyumsuzluk çözülemeyen bir mesaj olarak geri dönerdi. Şimdi aynı struct.
İkinci kazanç: Leptos'un reaktivite modeli ince taneli. Bir sinyal değiştiğinde sadece ona bağlı DOM düğümü güncelleniyor; bileşen ağacını yeniden çalıştırıp farkını almak diye bir aşama yok. Bunun pratik sonucu, uzun bir mesaj listesinin altına yeni mesaj eklendiğinde yukarıdaki hiçbir şeyin yeniden değerlendirilmemesi.
Fatura: ilk yükleme
WASM paketi JavaScript'ten büyük. Bu bir ayar meselesi değil, bir doğa kanunu — derlenmiş kodun kendisini gönderiyorsun.
Küçültme, sıkıştırma, kod bölme hepsi mümkün ve hepsini yaptık. Ama açık konuşayım: ilk yükleme hâlâ eşdeğer bir JavaScript uygulamasından ağır. Kullanıcı uygulamayı açtıktan sonra fark yok, hatta lehimize; ama o ilk saniye sizin ödediğiniz fatura.
Bu takas hangi ürün için mantıklı? Kullanıcının günde bir kez açıp saatlerce içinde kaldığı bir ürün için mantıklı. Bir pazarlama sayfası veya arama sonucundan gelinen bir sayfa için tamamen saçma.
Bir teknolojinin doğru seçim olup olmadığını belirleyen şey, kullanıcının onunla ne kadar süre kaldığı.
Fatura: ekosistem
Hazır çözümlerin çoğunu kullanamıyorsunuz.
React ekosisteminde bir tarih seçici, bir sürükle-bırak kütüphanesi, bir zengin metin editörü arıyorsanız on tane seçeneğiniz var, dokuzu iyi. Leptos'ta ya doğrudan JavaScript kütüphanesini sarmalıyorsunuz — ki bu, kaçındığınız sınırı geri getiriyor — ya da kendiniz yazıyorsunuz.
Biz çoğunlukla kendimiz yazdık. Bu bazen iyi oldu (tam istediğimiz davranış, gereksiz kod yok), bazen bariz bir zaman kaybı oldu. Bir zamanlayıcı bileşeni yazmak için harcanan iki gün, hiçbir müşteriye anlatabileceğiniz bir şey değil.
Bir de şu var: hata mesajları. Rust'ın derleyicisi genel olarak mükemmel ama bir makro içinde tip hatası yaptığınızda çıkan mesaj bazen okunmuyor. Buna alışıyorsunuz, ama yeni birinin ekibe katılma süresi uzuyor.
Kime öneririm
Ürününüz uzun oturumlu ve durum yönetimi karmaşıksa — gerçek zamanlı iletişim, editör, panolar — ve zaten sunucu tarafında Rust yazıyorsanız, bu birleşim gerçekten güçlü.
Ekibiniz Rust bilmiyorsa veya ürün henüz ne olacağını bilmiyorsa, yapmayın. Haftada üç kez arayüzü baştan yazdığınız bir aşamada derleyiciyle tartışmak, henüz doğru olduğundan emin olmadığınız bir tasarımı savunmak demek.
Bir yıl sonra ben aynı kararı tekrar verir miydim? Xaron için evet. Sperare veya Teck için hayır — ve ikisi de TypeScript üzerinde kaldı, sebebi tam olarak bu.