Firenook – Rust Tabanlı Firebase Emülatörleri: 40 Kat Daha Hızlı Yazma, 10 Kat Daha Az RAM
Kaynak: Hacker News
İçindekiler 5 başlık
Firebase Yerel Emülatör Paketi İçin Daha Hızlı Bir Alternatif#
Yazılım geliştirme süreçlerinde yerel test ortamlarının hızı ve kaynak tüketimi, geliştirici deneyimini doğrudan etkiler. Firenook (güncel sürüm 0.2.1), Firebase Local Emulator Suite için Rust ile geliştirilmiş, doğrudan mevcut yapınızın yerine geçebilen (drop-in replacement) çok daha hızlı bir alternatiftir.
Mevcut firebase.json yapılandırma dosyanızı, kullandığınız SDK'ları ve port ayarlarınızı olduğu gibi koruyarak, başlatma betiğinizdeki (script) tek bir kelimeyi değiştirmeniz geçiş yapmak için yeterlidir. Üstelik sisteminize Java kurmanıza gerek kalmaz ve yerel verileriniz yeniden başlatmalar sonrasında bile kaybolmaz. Projeye dahil etmek için şu komutu kullanabilirsiniz:
$ npm install --save-dev firenook
Performans Karşılaştırması ve Öne Çıkan Metrikler#
Firenook, geleneksel emülatör paketine kıyasla üç temel metrikte çarpıcı iyileştirmeler sunar:
- 40 kat daha hızlı yazma işlemleri: Ortanca (median) değerlerde 208.2 ms yerine sadece 5.1 ms yazma süresi.
- 10 kat daha az bellek kullanımı: Zirve (peak) kullanımda 22.57 GiB yerine yalnızca 2.11 GiB RAM tüketimi.
- Verilerle birlikte 0.59 saniyede yeniden başlatma: Mevcut verilerinizle birlikte 30.8 saniye süren yeniden başlatma süresi 0.59 saniyeye düşer.
Demo-Shop Uygulaması: Başlangıç ve Servis Durumları#
firenook 0.2.0 sürümü ve Node 24.20.0 ortamında kaydedilen demo-shop örneğinde, veriler .firenook/state dizininde saklanır. İlk başlatmada tüm emülatörler toplam 796 ms (ikinci yeniden başlatmada ise 602 ms) içinde hazır hale gelir. Desteklenen 5 temel servis ve yüklenme metrikleri şunlardır:
- Firestore: 255 ms (yeniden başlatmada 240 ms) içinde 1.207.802 doküman (sonrasında 1.207.804 doküman) ile hazır (Port:
8080). - Auth: 255 ms (yeniden başlatmada 240 ms) içinde 64.000 kullanıcı ile hazır (Port:
9099). - Storage: 255 ms (yeniden başlatmada 240 ms) içinde 5.400 nesne ile hazır (Port:
9199). - Functions: 423 ms (yeniden başlatmada 299 ms) içinde 4 fonksiyon ile hazır (Port:
5001). - Pub/Sub: 0 ms içinde 1 zamanlanmış görev (schedule) ile hazır (Port:
8085).
Tüm servisler ayağa kalktığında yönetim konsoluna http://127.0.0.1:4000/console adresinden ve 4400 numaralı Hub portundan erişilebilir.
Gerçek Zamanlı Log Takibi ve Geliştirici Çıktıları#
Emülatör çalışırken terminal üzerinden HTTP isteklerini, Firestore tetiklemelerini ve hata kayıtlarını anlık olarak izlemek mümkündür. demo-shop çalışmasında kaydedilen 5 çağrı (4 başarılı, 1 hatalı) şu şekildedir:
- checkout (HTTP POST / 201): İlk çağrıda 117 ms (yeniden başlatmada 115 ms) sürede tamamlanan başarılı sipariş işlemi.
- sendReceipt (Firestore tetiklemesi):
orders/qXoV1oOgJ0IILQs5psZP(ve sonrasındaEYi9LKG7xQ53eLrWktHm) dokümanı oluşturulduğunda 6 ms içinde toplam 36 birimlik makbuzu kuyruğa alan işlem. - checkout (HTTP POST / 201): İkinci çağrıda 4 ms (yeniden başlatmada 6 ms) gibi çok kısa bir sürede tamamlanan sipariş işlemi.
- sendReceipt (Firestore tetiklemesi):
orders/ZskDC6u3kTKSGalf4o5L(ve sonrasındaCU0LwsLgczq054BqsEuH) dokümanı için 1 ms (yeniden başlatmada 2 ms) sürede toplam 32 birimlik makbuzu kuyruğa alan işlem. - stripeWebhook (HTTP POST / 500):
functions/index.js:24:11konumunda, beklenen payload imzası eşleşmediği için (No signatures found matching the expected signature for payload) 1 ms içinde yakalanan işlenmemiş hata (Unhandled error).
Yazılım Geliştirme ve Öğrenme Açısından Pratik Çıkarımlar#
- Hızlı Geri Bildirim Döngüsü: 1.2 milyondan fazla doküman ve 64.000 kullanıcı verisini saniyenin altında (
0.59 s) yeniden yükleyebilmek, entegrasyon testlerinde ve yerel hata ayıklamada (debugging) bekleme sürelerini ortadan kaldırır. - Donanım Dostu Yerel Geliştirme: Java bağımlılığının kalkması ve RAM tüketiminin 22.57 GiB'den 2.11 GiB'ye düşmesi, sınırlı donanıma sahip bilgisayarlarda bile büyük ölçekli verisetleriyle çalışmayı mümkün kılar.
- Etkileşimli Terminal Deneyimi: Terminal arayüzündeki kısayollar (
okonsolu açma,ryeniden yükleme,?tuş takımı yardımı,qçıkış) ve doğrudan konsolda açılabilen (open in console) hata izleri, geliştiricilerinstripeWebhookgibi hataları anında tespit edip çözmesini kolaylaştırır.
Kaynak ve atıf
Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:
- firenook.dev