Pada komparasi ini, saya akan membandingkan hono vs express.js. Beberapa hal yang akan saya bandingkan adalah dokumentasi, komunitas, performa, dan kelengkapan fitur.
Dokumentasi
Seperti framework besar pada umumnya. Hono dan Express memiliki dokumentasi yang sudah lengkap. Yang bahkan bisa digunakan oleh para pemula. Memiliki navigasi yang mudah, yang bahkan kita bisa tahu kita harus memulai mempelajari ini mulai darimana. Namun, dari sisi keindahan antarmuka, saya pribadi lebih menyukai website dokumentasi Hono, karna Hono memiliki menu di sebelah kiri (sidebar), yang lebih mudah untuk dijangkau.
Komunitas
Jika kita lihat sekarang, express memiliki jumlah download yang jauh lebih besar dibandingkan hono.
Jumlah download express saat ini:
Jumlah download hono saat ini:
Dari jumlah diatas, kita sudah dapat melihat bahwa, express memiliki jumlah komunitas yang lebih tinggi dibandingkan hono. Namun, secara history, sejak tahun 2023, hono memiliki peningkatan jumlah download yang lebih banyak, sedangkan express tetap diangka yang sama.
History jumlah download express pada NPM:
History jumlah download hono pada NPM:
Dari jumlah history tersebut, tidak menutup kemungkinan bahwa jumlah pengguna hono akan lebih meningkat lagi di kemudian hari.
Performa
Dalam pengujian performa, saya mencoba membandingkan secara adil antara hono dengan express. Dimulai dari uji coba ping dengan beberapa virtual user, dan percobaan menggunakan beberapa fitur yang mungkin bisa dibandingkan. Perbandingan dua framework ini hanya memperbandingkan hono typescript dengan runtime type bun, hono javascript dengan runtime type node.js, dan express javascript dengan runtime type node.js.
Pengujian 1000 Virtual User dengan K6
Eksperimen kali ini, kita mencoba membandingkan seperti apa hasil pengujian menggunakan k6 dengan 1000 virtual user dalam 1 detik. Pengujian dilakukan dalam 30 detik. dan berikut adalah hasilnya
Pengujian K6 Hanya dengan Ping Pong Code
Dalam pengujian kali ini, saya mencoba untuk membuat kode dengan route /ping yang memberikan balikan pong! dan mengeluarkan log "someone pinged me". Berikut adalah kode dari 2 framework tersebut.
Kode Ping Hono Typescript Bun & Kode Ping Hono Javascript Node.js
import { Hono } from 'hono'
const app = new Hono()
app.get( '/ping', ( c ) =>
{
console.log( "someone pinged me" )
return c.text( 'pong!' )
} )
export default {
port: 3001,
fetch: app.fetch,
}
Kode Ping Javascript Express Node.js
const express = require('express');
const app = express();
const port = 3001;
app.get('/ping', (req, res) => {
console.log("someone pinged me");
res.send('pong!');
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Hasil Pengujian Ping Hono Typescript Bun
data_received..................: 3.6 MB 119 kB/s
data_sent......................: 2.5 MB 83 kB/s
http_req_blocked...............: avg=225.58µs min=1µs med=3µs max=31.66ms p(90)=7µs p(95)=16.04µs
http_req_connecting............: avg=206.36µs min=0s med=0s max=17.92ms p(90)=0s p(95)=0s
http_req_duration..............: avg=4.24ms min=48µs med=3.18ms max=39.06ms p(90)=9.37ms p(95)=10.78ms
{ expected_response:true }...: avg=4.24ms min=48µs med=3.18ms max=39.06ms p(90)=9.37ms p(95)=10.78ms
http_req_failed................: 0.00% 0 out of 30000
http_req_receiving.............: avg=126.23µs min=4µs med=17µs max=16.26ms p(90)=55µs p(95)=102µs
http_req_sending...............: avg=336.67µs min=2µs med=9µs max=28.52ms p(90)=642µs p(95)=1.45ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.77ms min=34µs med=2.96ms max=29.01ms p(90)=8.55ms p(95)=9.6ms
http_reqs......................: 30000 992.329853/s
iteration_duration.............: avg=1s min=1s med=1s max=1.04s p(90)=1.01s p(95)=1.01s
iterations.....................: 30000 992.329853/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Hasil Pengujian Ping Hono Javascript Node.js
data_received..................: 4.9 MB 164 kB/s
data_sent......................: 2.5 MB 83 kB/s
http_req_blocked...............: avg=4.9ms min=0s med=2µs max=1.01s p(90)=6µs p(95)=31µs
http_req_connecting............: avg=4.88ms min=0s med=0s max=1s p(90)=0s p(95)=0s
http_req_duration..............: avg=2.22ms min=0s med=1.05ms max=57.11ms p(90)=3.31ms p(95)=4.12ms
{ expected_response:true }...: avg=2.21ms min=44µs med=1.03ms max=57.11ms p(90)=3.24ms p(95)=4.08ms
http_req_failed................: 1.53% 459 out of 29866
http_req_receiving.............: avg=27.26µs min=0s med=13µs max=7.84ms p(90)=45µs p(95)=68µs
http_req_sending...............: avg=54.76µs min=0s med=5µs max=4.3ms p(90)=55µs p(95)=172µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=2.14ms min=0s med=985µs max=56.35ms p(90)=3.23ms p(95)=4.05ms
http_reqs......................: 29866 991.048311/s
iteration_duration.............: avg=1s min=1s med=1s max=2.02s p(90)=1s p(95)=1s
iterations.....................: 29866 991.048311/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Hasil Pengujian Ping Express Javascript Node.js
data_received..................: 6.6 MB 217 kB/s
data_sent......................: 2.5 MB 83 kB/s
http_req_blocked...............: avg=2.16ms min=0s med=2µs max=202.62ms p(90)=8µs p(95)=8.53ms
http_req_connecting............: avg=2.15ms min=0s med=0s max=202.49ms p(90)=0s p(95)=8.41ms
http_req_duration..............: avg=2.37ms min=0s med=707µs max=61.1ms p(90)=4.95ms p(95)=8.48ms
{ expected_response:true }...: avg=2.08ms min=77µs med=630µs max=61.1ms p(90)=3.61ms p(95)=5.99ms
http_req_failed................: 5.13% 1539 out of 30000
http_req_receiving.............: avg=12.69µs min=0s med=9µs max=862µs p(90)=25µs p(95)=32µs
http_req_sending...............: avg=35.86µs min=0s med=3µs max=4.04ms p(90)=15µs p(95)=51.04µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=2.32ms min=0s med=688µs max=61.08ms p(90)=4.9ms p(95)=8.24ms
http_reqs......................: 30000 989.805596/s
iteration_duration.............: avg=1s min=1s med=1s max=1.2s p(90)=1s p(95)=1.03s
iterations.....................: 30000 989.805596/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Kesimpulan Hasil Pengujian Ping
Secara keseluruhan, hono typescript bun lebih unggul dibandingkan express. Terutama dalam stabilitas dan efisiensi dalam menerima request HTTP.
Berikut adalah alasan mengapa hono lebih unggul dibandingkan express.
- Hono typescript bun tidak memiliki request failed sama sekali, berbeda dengan hasil express yang memiliki kegagalan sekitar 5.13%
- Hono typescript bun memiliki waktu blocking dan request connection yang lebih cepat, dimana hono memiliki rata-rata waktu blocked sebesar 225.58µs dan rata-rata waktu request connection sebesar 206.36µs, berbeda dengan hono yang hanya dalam waktu micro second, express memiliki rata-rata waktu blocked sebesar 2.16ms dan rata-rata waktu request connection sebesar 2.15ms
- Hono memiliki request waiting yang lebih stabil dibandingkan express, meski ekspress memiliki rata-rata request waiting yang lebih rendah (2.32ms) dan hono mencapai (3.77ms), namun hono memiliki nilai maksimum yang lebih rendah, yaitu 29.01ms sedangkan express mencapai 61.08ms
Walaupun express memiliki sedikit rata-rata waktu request lebih cepat, namun stabilitas dan keandalan hono lebih baik daripada express. Jadi hasil keseluruhan adalah hono bun typescript lebih baik dari express node javascript dalam uji coba kali ini. Butuh uji coba lebih lanjut? kita bisa diskusi disini ya.
Selanjutnya mari kita bandingkan, hono javascript node.js vs express javascript node.js
Secara keseluruhan hono javascript node.js lebih unggul dibandingkan express javascript node.js. Berikut adalah alasan kenapa hono lebih unggul:
- Hono javascript node.js lebih unggul dalam kecepatan, memiliki rata-rata waktu request lebih cepat yaitu 2.22ms dengan nilai maksimum 57.11ms sedangkan express javascript node.js memiliki rata-rata waktu request 2.37ms dengan nilai 61.1ms.
- Hono javascript node.js memiliki tingkat request failed yang lebih rendah, yaitu 1.53%, sedangkan express memiliki request failed 5.13%.
- Hono javascript node.js sedikit lebih cepat dalam menyelesaikan request, yaitu 991 per detik sedangkan express 990 per detik.
Dari hasil tersebut, dapat disimpulkan hono typescript bun ataupun hono javascript node.js lebih baik dibandingkan express javascript node.js.
Kelengkapan Fitur
Dalam sesi ini kita akan membahas middleware dan utility. Karna baik hono ataupun express. Memiliki fitur yang menurut saya sudah sangat cukup untuk pembuatan aplikasi production.
Middleware
Hono memiliki middleware yang banyak, mulai dari basic auth hingga mencantumkan 3rd Party middleware, namun express juga memiliki middleware yang banyak. Jadi untuk komparasi ini, mungkin tergantung dari project kita masing-masing, middleware seperti apa yang kita butuhkan. Jadi saya rasa mereka berdua memberikan layanan middleware yang sangat membantu untuk project kita. Namun jika sedikit menyelami apa saja middleware yang ada pada dokumentasi mereka, mungkin untuk start up project, middleware hono akan sangat membantu kita.
Utility
Pada sisi utility, fitur-fitur yang disediakan pada dokumentasi hono dan express memiliki jumlah yang relative sama. Namun, hono memiliki lebih banyak keunggulan. Seperti helper untuk css, helper html yang bisa kita gunakan dengan merender jsx, yang bahkan dari tiga hal tersebut saya belum menemukan adanya helper-helper tersebut pada dokumentasi utility express. Tapi pada dasarnya, karena express memiliki komunitas yang besar, kita bisa menggunakan 3rd party untuk hal ini.
Kesimpulan
Jangan ragu untuk mencoba menggunakan hono, meskipun framework ini tergolong baru, namun stabilitas, kelengkapan fitur, dan rasa nyaman dalam ngoding sangat luar biasa. Dan kita bisa menggunakan bahasa typescript yang memudahkan kita untuk identifikasi tipe data. Adapun yang mana yang lebih baik, andalah yang memutuskan untuk project anda.
Don't forget to keep smile 😊, and always be happy 😃