Misskey (GeekNews), ActivityPub federasyonunu destekleyen bir mikroblog sunucu yazılımıdır. Misskey ağırlıklı olarak Japonya'da geliştiriliyor; emoji reaksiyonları, kendi işaretleme dili olan MFM, anahtar kelime takibi (anten), profil süsleme, kendi betik dili AiScript ile etkileşimli sayfalar oluşturma, mini oyunlar gibi eğlenceli özellikleri çok olduğu için eğlence arayan kullanıcıların sıkça tercih ettiği bir platformdur.
Bildiğim kadarıyla Misskey'in teknoloji yığını şu şekildedir. (Yanlış olabilir.)
- NodeJS, TypeScript
- Koa.js, PostgreSQL, Redis
- Vue
Bu yazıda Misskey'in bakımını yapan syuilo, NodeJS ile karşılaştırıldığında Bun'ın performansını Misskey'in kaynak kodu üzerinden doğruluyor.
- Amaç, mevcut kaynak kodu aynen Bun ile çalıştırdığında hızlanıp hızlanmadığını test etmek. Yazıda Bun için ayrıca optimizasyon yapılmadığı ve uyumsuz kod karmaşıksa testin gerçekleştirilmediği belirtiliyor.
- Yazıda bunun yalnızca tek bir örnek vaka olarak görülmesi gerektiği özellikle vurgulanıyor.
- Test Ubuntu'da yapılmış olsa da Windows'ta da büyük bir fark olmadığı söyleniyor.
Sonucu baştan söylemek gerekirse, bu vakada Bun'da performansın aksine düştüğü durumlar baskın çıktı. Mevcut büyük ölçekli bir kod tabanını Bun ile çalıştırmanın sihirli biçimde hızlandıracağı söylenemez... gibi görünüyor. ChatGPT'nin özetlediği içerik şöyle:
- Bellek kullanımı: Node yaklaşık 200MB, Bun yaklaşık 800MB; Bun çok daha fazla bellek tüketiyor.
- Çalışma hızı: Zaman akışı görüntüleme gibi çeşitli işlemlerde Node daha hızlı sonuç verdi. Özellikle gönderi oluştururken Node 5 saniye, Bun 10 saniye ile Node 2 kat daha hızlıydı.
- AiScript: Saf JavaScript kodu çalıştırmada Node (V8 motoru) yaklaşık 1,5 kat daha hızlıydı.
Yazıda kod tabanının her bölümüne ait çalışma benchmark'ları yer alıyor; ancak WebSocket'in tek seferlik çalıştırılması hariç hepsinde NodeJS az ya da belirgin farkla daha hızlı sonuç verdi. WebSocket çalıştırmasında da 100 bin kez yürütmede NodeJS az farkla daha hızlı çıktı.
Bununla birlikte yazının yazarı syuilo, Bun'ın gelişme potansiyeline hâlâ umut bağladığını ve ek optimizasyonlarla performansın iyileşebileceğini de belirtiyor.
9 yorum
Basitçe değiştirip çalıştırdığınızda,
node:cryptoya dazlibile ilgili kütüphaneler gibi, Bun dokümantasyonunda veya issue'larında da belirtildiği üzere hâlâ yeterince optimize edilmemiş durumlar da var.Örneklerdeki gibi 5 saniyeden 10 saniyeye çıkacak kadar yavaşladıysa, muhtemelen mesele böyle bir noktadır. Nitekim ben de JWT ile ilgili bir kütüphanede bu sorun yüzünden birkaç kat yavaşlama yaşamıştım; bu nedenle kütüphaneyi değiştirip optimize etmem gerekmişti.
Japonca teknik blog yazılarını nereden aldığınızı merak ediyorum. Sistematik ve özlü bir havası var da.
Diğer yazıları bilmem ama bu yazı Misskey'e yüklendiği için Fediverse üzerinden alınabiliyordu (ben de önce orada gördüm, sonra buraya yüklendiğini fark ettim)
Bu metnin kaynağını tam bilmiyorum ama Qiita'da çok sayıda iyi yazı yayımlanıyor gibi görünüyor.
İngilizce konuşulan ülkelerdeki ya da Kore bloglarından farklı bir bakış açısıyla analiz eden yazıları çevirip çeşitli kanallarda paylaşan birkaç kişi var; ortak noktaları ise genelde Qiita yazılarını çevirmiş olmalarıydı.
Google aramasının otomatik tamamlamasında Kita ile zenn’i karşılaştıran bir arama sorgusu önerildiği için zenn’i de bulabildim. Bilgi için teşekkür ederim.
Qiita, Kiita diye okunur.
Ah, öyleymiş, utandım.
Oldukça ilgi çekici bir sonuç. Bun için web framework olarak ElysiaJS sıkça öneriliyor, ancak Bun'ın sunduğu optimize edilmiş API'ler kullanılmadığında performansın aksine düşmesi gibi bir sorun vardı. Koa.js kullanıldığı belirtilmiş; performansın o tarafta ciddi ölçüde düşmüş olduğunu tahmin ediyorum.
Runtime ile sistem entegrasyonu arasındaki farkı ayırt ederek bakmak gerekir sanırım.
Bun'ın övündüğü performans genel olarak JSC'nin özelliklerinden, bazı sistem entegrasyonu optimizasyonlarından (veya işlev azaltımından) ve iyi temel kütüphanelerin seçilmesinden kaynaklanıyor.
Bu yüzden küçük ölçekli benchmark'larda Bun kazanma eğilimindeyken, büyük ölçekli/uzun süreli benchmark'larda ise aynı anda Node.js'in gerisinde kalma eğilimi de var.