Gunakan tanda [] untuk mencari tag gan! contoh [flutter, javascript]

Hono VS Express

Hono VS Express

access_time 22 Okt 2024 remove_red_eye 506 Kali spellcheck 1690 Kata, 11208 Karakter
#hono #comparison #express

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:

NPM Downloads

Jumlah download hono saat ini:

npm

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.

  1. Hono typescript bun tidak memiliki request failed sama sekali, berbeda dengan hasil express yang memiliki kegagalan sekitar 5.13%
  2. 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
  3. 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:

  1. 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.
  2. Hono javascript node.js memiliki tingkat request failed yang lebih rendah, yaitu 1.53%, sedangkan express memiliki request failed 5.13%.
  3. 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 😃

Navigasi Konten