17 poin oleh tsboard 2024-12-01 | 16 komentar | Bagikan ke WhatsApp

Kesimpulan utama

  • Bahasa Go tidak selalu lebih cepat. Bahkan, runtime JS bisa saja lebih cepat.
  • Go membanggakan kesederhanaan dan efisiensi, tetapi di lingkungan nyata performanya kadang lebih rendah dari perkiraan.
  • Terutama dalam situasi dengan banyak database I/O, performanya bisa kalah dibanding runtime JavaScript seperti Bun.

Hasil benchmark

  • Go menunjukkan throughput permintaan yang lebih tinggi dan penggunaan memori yang lebih rendah, tetapi penggunaan CPU 2–3 kali lebih tinggi.
  • Namun, di lingkungan dunia nyata dengan banyak DB I/O, Bun (kombinasi framework Elysia dan library MySQL2) menunjukkan performa yang lebih stabil dan efisien.
  • Router HTTP standar memiliki performa rendah, dan setelah beralih ke framework Fiber, diperoleh kecepatan respons yang mirip dengan Bun. (Jangan gunakan Go standard HTTP Router!)

Kelebihan Go yang saya pikirkan saat menjalankan benchmark ini

  • Menyediakan beragam tipe primitif dan type safety.
  • Deploy sebagai binary tunggal: bisa didistribusikan sebagai file eksekusi sederhana, menghilangkan dependensi runtime.
  • Goroutine: mendukung pemrosesan paralel secara efisien, dan bila digunakan dengan tepat dapat memaksimalkan performa hardware.

Keterbatasan dan ruang perbaikan yang saya rasakan dari benchmark ini

  • Dugaan masalah performa driver MySQL: go-mysql-driver di Go stabil tetapi lambat, dan tampaknya kalah performa dibanding mysql2 di JavaScript. (Tentu saja, bisa jadi saya yang keliru)
  • Untuk pekerjaan tanpa koneksi DB, Go menunjukkan performa yang lebih baik. Mungkin ini memang sudah sewajarnya.
  • Performa router HTTP yang rendah: demi kesehatan mental, gunakan Fiber atau framework lain!

Alasan tetap ingin menggunakan Go meski kurang puas dengan performanya

  • Type safety Go, deploy binary tunggal, dan performa pemrosesan paralel dari goroutine sangat menarik bagi saya sebagai developer. Tipe-tipe yang tidak bisa digantikan oleh TypeScript serta distribusi file binary tunggal tanpa perlu npm install adalah nilai tambah yang sangat besar.
  • Karena melihat masih ada kemungkinan optimasi performa tambahan, saya memutuskan untuk terus mempelajari dan menggunakan Go.

Pesan untuk para developer

  • Semua bahasa dan teknologi memiliki kelebihan dan kekurangan. Saya rasa bahasa Go juga demikian.
  • Daripada kecewa dengan performa Go, akan lebih baik jika kita memanfaatkan kelebihannya dengan baik dan terus mencari cara untuk menembus batas performanya.
  • Saya menulis artikel ini untuk membagikan informasi kepada developer yang menggunakan Go bahwa ada juga hasil analisis seperti ini.

16 komentar

 
roxie 2024-12-04

Ini benar-benar di luar topik, tapi font IBM Plex Sans KR sangat bagus.

 
tsboard 2024-12-04

Saya juga sangat suka font itu sampai memakainya, tetapi ada satu hal yang agak disayangkan: kalau dilihat di monitor beresolusi rendah, tampilannya jadi tidak terlalu cantik. Hehe, tapi kalau dilihat di monitor 5K, benar-benar cantik!

 
kuber 2024-12-02

Menurut saya, kita harus benar-benar berhati-hati saat mengkritik sesuatu.

Dalam keadaan ketika belum jelas apakah ini masalah pada level bahasa, masalah library tertentu, atau masalah pada kode, dan bahkan informasi yang diberikan juga belum cukup agar orang lain bisa mereproduksinya, lalu secara terbuka menyatakan bahwa sesuatu itu buruk,

meskipun mungkin itu bukan niat Anda, tampaknya tetap bukan hal yang menyenangkan bagi orang-orang yang hidup di dalam ekosistem tersebut.

 
tsboard 2024-12-03

Halo! Pertama-tama, terima kasih atas pendapat berharga yang Anda tinggalkan. Saya memahami dari sudut pandang seperti apa Anda menyampaikan pendapat tersebut, dan jika tulisan saya sampai terasa seolah-olah saya sedang mencela masa depan bahasa Go atau para penggunanya, saya ingin sekali lagi menegaskan bahwa itu bukan maksud saya, sekaligus menyampaikan permintaan maaf. Dan jika berkenan, saya rasa kalau Anda mengklik judul artikelnya, di sana ada berbagai data serta tambahan tulisan blog dari orang lain, jadi meskipun agak panjang, jika Anda membacanya, saya pikir Anda akan bisa memahami maksud saya dengan lebih jelas.

Saya merasa bahasa itu semacam mobil. Setiap mobil punya berbagai kelebihan dan kekurangan, biaya yang dibutuhkan untuk membelinya berbeda-beda, dan meskipun tampak menjalankan peran yang sama, masing-masing mengejar nilai yang berbeda. Dalam hal itu, menurut saya keduanya mirip. Tentu saja, menurut saya juga wajar bila seseorang punya rasa sayang dan kecintaan khusus pada kendaraan tersebut. Saya pun mencintai mobil saya dan memercayai pabrikan mobilnya.

Meski begitu, saya juga punya hal-hal yang saya sayangkan atau keluhan terhadap mobil saya, dan para reviewer yang secara berkala mengulas model-model mobil selalu membagikan penilaiannya sambil membandingkannya dari berbagai sisi dengan model pesaing. Jika seseorang berkata bahwa performa transmisinya kurang bagus atau efisiensi bahan bakarnya buruk, terus terang saya juga tidak merasa senang. Namun demikian, saya cenderung berusaha memisahkan antara saya sebagai pengemudi dan mobil itu sendiri. Selain itu, saya juga berusaha mencari tahu lebih banyak tentang mobil yang saya kendarai, baik kelebihannya maupun kekurangannya. Mungkin suatu saat saya akan mengendarai mobil lain, tetapi pengalaman berkendara yang saya miliki sekarang tetap akan berguna saat itu nanti.

Di versi ringkasan saya memang tidak banyak menyebutkannya, tetapi di isi utama blog, saya menutup tulisan dengan mengatakan bahwa meskipun Go punya beberapa kekurangan yang disayangkan, kelebihannya tetap lebih banyak, sehingga saya ingin terus menggunakannya (=mengendarainya). Karena tiap bahasa memiliki nilai dan keunggulan yang dikejar masing-masing, saya cenderung berusaha menggunakan bahasa yang beragam (=kendaraan) sebanyak mungkin. Itu juga alasan saya rela berpindah ke bahasa Go meskipun sebelumnya sudah menggunakan JS runtime dengan baik.

Saya merasa sudah menulisnya sebaik mungkin dengan hati-hati agar tidak memicu perdebatan bahasa yang tidak perlu. Namun, jika tetap ada para Gopher yang merasa tidak nyaman setelah membaca tulisan ini, saya sekali lagi berharap Anda bisa berlapang hati. Sebagai penutup komentar ini, izinkan saya menegaskan bahwa saya adalah coder romantis yang juga mencintai bahasa PHP, yang dulu begitu sering dicaci!

 
savvykang 2024-12-03

Dalam artikel aslinya, penulis menuliskan analisis versinya sendiri tentang bagian yang lambat dan juga alasan mengapa ia tetap akan menggunakan Go. Jadi saya kurang paham atas dasar apa Anda menerima tulisan ini sebagai penilaian nilai.

 
kuber 2024-12-02

Sedikit OOT, tetapi performa std library Go justru menurun seiring waktu. Alasan utamanya adalah trade-off akibat penambahan berbagai fitur demi mematuhi standar RFC serta banyaknya kerentanan keamanan yang dilaporkan.

Belakangan ini, untuk bisa lolos sertifikasi FIPS, tampaknya kerugian dari sisi performa kemungkinan akan menjadi sedikit lebih besar.

Jika semua latar belakang ini diabaikan lalu hanya ditulis singkat bahwa performanya buruk pada skenario tertentu yang paling sederhana, menurut saya itu cukup untuk menimbulkan kesalahpahaman bagi banyak orang ;_;

 
ifmkl 2024-12-02

Saya menunggu versi 1.0 tsboard, hehe

 
tsboard 2024-12-02

Terima kasih telah menunggu! Saya akan mengerjakannya dengan senang hati, hehe

 
kandk 2024-12-02

Saya rasa tidak ada alasan khusus mengapa JS harus lambat saat menggunakan JIT.
Kalau mengecualikan multithreading, stabilitas, dan semacamnya..

 
tsboard 2024-12-02

Hal yang juga baru saya sadari(?) lewat benchmark ini adalah bahwa tingkat stabilitasnya tampaknya sudah cukup baik, jadi saya rasa saya berani mengatakan demikian. Multithreading memang jelas memerlukan orkestrasi (saya juga kurang yakin apakah istilah ini tepat), jadi memang agak merepotkan.

 
joyfui 2024-12-02

Situsnya tidak bisa diakses, apa cuma saya yang mengalami ini?

 
tsboard 2024-12-02

Halo! Terima kasih sudah memberi tahu lewat komentar, hehe. Karena saya masih belum sempat memindahkan situs ke hosting, kadang-kadang ada gangguan saat diakses. Saya akan berusaha menanganinya secepat mungkin. (Untuk sekarang mini PC di rumah sedang kerja rodi 😂)

 
joyfui 2024-12-02

Oh, sekarang sudah bisa. Akan saya baca baik-baik!

 
tsboard 2024-12-02

Situsnya sudah dipindahkan dari mini PC rumahan ke server virtual sebesar kamar kos kecil...! Hari ini tanpa diduga banyak yang sempat mampir lalu harus balik lagi, tapi sekarang saya kabarkan bahwa masalahnya sudah tidak ada lagi!

 
lemonmint 2024-12-02

Saya penasaran apakah hasilnya akan berbeda jika diuji dengan driver github.com/jackc/pgx/v5 dan PostgreSQL.

 
tsboard 2024-12-02

Saya juga penasaran apakah hasil ini terbatas pada mysql, atau berlaku untuk semua skenario yang menggunakan DB. Saya rasa suatu saat nanti orang lain akan membagikan hasilnya juga haha