← Ana sayfa English →
Blog · Türkçe

Express gerçekten yavaş mı

Node.js × Express performans ölçümü

2,5×
Kodda tek satır değişmeden, sadece Node 18’den 26’ya geçilince Express’in saniyede işlediği istek sayısı bu kadar artıyor.

Düzeltme: yazının önceki halinde yanlışlıkla ~2,3× yazılmıştı. Doğru rakam ~2,5×.

Express hakkında en çok duyduğumuz şikayetlerden biri şu cümle. Express yavaş, Hono kullan, Elysia kullan, Fastify kullan. Bu iddiayı gerçek verilerle test etmek için Express 4.22.2 ve Express 5.2.1 sürümlerini Node.js 18, 20, 22, 24 ve 26 üzerinde ölçtük. Üstüne Node 26’da Hono 4.12.32 ve Elysia 1.4.29 ile de karşılaştırdık.

Sonuç beklediğimizden farklı çıktı.

Express yavaş değil. Senin Node sürümün yavaş.

Nasıl ölçtük
Kendine ait 2 çekirdekli AMD EPYC bir Hetzner sunucusunda, Ubuntu 26.04 üzerinde çalıştırdık. Her framework aynı üç uç noktayı sundu. Basit bir JSON dönüşü, parametre okuyan bir kullanıcı sorgusu ve gövdesi JSON olan bir echo isteği. Yük testi olarak autocannon kullanıldı, 20 bağlantı, 5 saniye ısınma ve ardından 55 saniye ölçüm. Her satır yüz binlerce isteğin ortalaması.

Asıl mesele Node sürümün

Değişkeni tek tek kapattığımızda ortaya çıkan tek gerçek fark buydu.

Aşağıda Express 4 ve Express 5 için saniyede işlenen istek sayısını Node sürümüne göre görüyorsun.

Node 18, 20 ve 22 arasında sonuçlar birbirine oldukça yakın, saniyede kabaca 3200 ile 4000 istek arasında. Ama Node 24’e geçtiğin anda sayı neredeyse ikiye katlanıyor, saniyede 8000’in üzerine çıkıyor. Bu artış hem Express 4’te hem Express 5’te aynı şekilde görülüyor.

Gecikme tarafında da aynı hikaye tekrarlanıyor.

Node 18’de Express 4’ün p99 gecikmesi 13.47 ms, Node 26’da aynı Express 4 uygulaması 5.95 ms’e düşüyor. Kod aynı, middleware aynı, route’lar aynı.

Değişen tek şey altındaki Node sürümü. Sorun kütüphanede değil, altyapıda.

Bu iyileşmenin hem Express 4’te hem Express 5’te aynı oranda yaşanması önemli bir ipucu. Yani bu bir Express meselesi değil, tamamen Node’un kendi motorundaki (V8) ve http modülündeki iyileştirmelerin sonucu. Eski bir Node sürümü üzerinde çalışan her framework benzer bir tavanla karşılaşır.

Peki Hono ve Elysia neden daha hızlı

Aynı Node 26 üzerinde, aynı üç uç noktayla test ettik.

Hono, Express’in neredeyse iki katı istek işliyor. Elysia da oldukça yakın bir performans sergiliyor. Burada Hono veya Elysia’yı kötülemek gibi bir niyetim yok, ikisi de gerçekten iyi tasarlanmış, modern araçlar.

Ama bu farkın nereden geldiğini anlamak önemli. Express, 2010 yılından beri sürekli geliştirilen ve olağanüstü geniş bir geriye dönük uyumluluk taşıyan bir kütüphane. Node’un klasik http modülünü saran, on yıllar boyunca eklenen middleware desenlerini, eski route tanımlama biçimlerini ve binlerce üçüncü parti paketle uyumluluğu koruyan bir katman üzerine kurulu. Hono ve Elysia ise sıfırdan, modern web standardı Request ve Response nesneleri üzerine, taşıması gereken hiçbir eski yük olmadan yazıldı. Daha ince bir soyutlama katmanı doğal olarak daha az iş yapıyor ve daha hızlı çalışıyor.

Yani Express’in görece yavaşlığı bir tembellik veya kötü mühendislik meselesi değil. Geriye dönük uyumluluğun getirdiği bir bedel. Bu bedeli neden ödediğini bir sonraki bölümde anlatıyoruz.

Performans her şeyi belirlemez

Bir kütüphane seçerken sadece saniyedeki istek sayısına bakmak eksik bir yaklaşım.

Express’i on beş yılı aşkın süredir ayakta tutan şey ham hız değil, sağladığı istikrar. Express’in sahip olduğu avantajlar şunlar.

Geriye dönük uyumluluk aslında bir zayıflık değil, bir özellik. Beş yıl önce yazılmış bir Express projesi bugün hâlâ küçük değişikliklerle çalışabiliyor. Yeni ve daha hızlı bir framework seçtiğinde bu garantiyi her zaman bulamazsın. Hono ve Elysia harika araçlar, ama henüz Express kadar uzun bir olgunluk sınavından geçmediler.

Bir proje beş, on yıl boyunca bakım isteyecekse, saniyedeki birkaç bin istek farkından çok daha önemli olan şey o kütüphanenin beş yıl sonra hâlâ sorunsuz çalışıp çalışmayacağı.

Peki Express kötü mü, hiç de değil

Şimdiye kadar Hono ve Elysia’nın öne çıktığı noktalara baktık. Madalyonun diğer yüzüne bakalım.

Bellek tarafında Express, Hono’ya çok yakın ve Elysia’nın oldukça gerisinde kalıyor. Daha doğrusu Elysia çok daha fazla bellek tüketiyor, Express’in yaklaşık yüzde altmış fazlası.

Başlangıç süresinde Express 4, Hono’nun hemen arkasında ikinci sırada yer alıyor ve Elysia’yı üç buçuk kattan fazla bir farkla geride bırakıyor. Elysia aslında Bun için tasarlanmış bir framework ve Node üzerinde bir uyumluluk katmanı üzerinden çalışıyor. Bu da hem başlangıç süresine hem bellek kullanımına yansıyor.

CPU kullanımına gelirsek, dört framework de yüzde 98 ile yüzde 101 arasında, aralarında pratikte anlamlı bir fark yok, hepsi tek çekirdeği benzer oranda kullanıyor. Gecikme tarafında Express, Hono ve Elysia’nın gerisinde kalıyor ama p99 gecikmesi Node 26’da 6 milisaniyenin altında. Gerçek dünyada bir API çağrısının toplam süresi genelde veritabanı sorguları, ağ gecikmesi ve dış servis çağrıları tarafından belirlenir, framework’ün eklediği birkaç milisaniyelik fark çoğu üretim senaryosunda gözle görülür bir etki yaratmaz.

Son olarak, Express 4 ile Express 5 arasındaki fark da dikkat çekici derecede küçük ve tutarsız. Bazı Node sürümlerinde Express 4 biraz önde, Node 24’te ise Express 5 öne çıkıyor. Bu da gösteriyor ki hangi Express sürümünü seçtiğin performans açısından belirleyici bir faktör değil.

Sonuç

Express uygulaman yavaş çalışıyorsa, framework değiştirmeyi düşünmeden önce Node sürümüne bak. Node 18, 20 ve 22’den Node 24 veya 26’ya geçmek, hiçbir kod değişikliği yapmadan performansı yaklaşık iki buçuk kat artırabiliyor. Bu, framework değiştirmekten çok daha ucuz ve çok daha az riskli bir çözüm.

Hono ve Elysia gibi modern framework’ler gerçekten hızlı ve gerçekten iyi tasarlanmış araçlar. Ham performans önceliğinse ve proje kısa ömürlü veya küçük ölçekliyse harika seçimler olabilirler.

Ama Express hâlâ gecikme, bellek kullanımı, CPU kullanımı ve başlangıç süresinde son derece rekabetçi bir konumda duruyor. Üstüne on beş yılı aşkın olgunluk, devasa bir ekosistem ve eşi benzeri olmayan bir uzun vadeli destek geçmişi sunuyor. Uzun ömürlü, ekip değişimlerine dayanıklı ve bakımı kolay bir proje inşa ediyorsan Express hâlâ piyasadaki en sağlıklı seçim.

Express 4.22.2 ve Express 5.2.1, Node.js 18.20.8, 20.20.2, 22.23.1, 24.18.0 ve 26.5.0, Hono 4.12.32 ve Elysia 1.4.29 ile ölçüldü. Tüm testler tek bir 2 çekirdekli sunucuda, istemci ve sunucu aynı makinede çalışacak şekilde yapıldı.