PHP dikenal sebagai salah satu bahasa yang sering dibully karena performanya yang selalu aja dikatakan lambat.. Apakah PHP memang lambatnya separah demikian? Nah, berhubung baru-baru ini saya baru mencicipi bahasa Golang, saya tertarik untuk mencoba melihat perbandingannya secara langsung dan sederhana. Mungkin saja kita bisa menemukan pencerahan.
Metode tes yang saya coba benar-benar sederhana, yaitu menampilkan data dari database yang sama dengan format response yang sama. PHP yang saya gunakan dalam test ini adalah versi 7.4, dan Go versi 1.15. Karena masing-masing bahasa pemrograman memiliki banyak kerangka kerja juga, saya mencoba melihat hasil response satu per satu dari 5 sample berikut ini:
1. PHP dengan framework Laravel
Laravel dikenal sebagai salah satu framework PHP yang menawarkan coding yang rapi dan elegan. Developer benar-benar dimudahkan oleh segala fitur dasarnya yang sangat lengkap. Kemudahan dan kelengkapan tersebut harus dibayar dengan performa yang tidak terlalu memuaskan.
Berdasarkan hasil tes diatas, Laravel membutuhkan waktu 257 ms untuk menampilkan response data dalam format JSON. 250 ms pun sebenarnya angka yang tidak terlalu buruk, cukup wajar karena memang laravel sendiri mempunyai library yang sangat banyak sehingga memakan waktu boot time yang cukup lama.
2. PHP dengan framework Lumen
Lumen dikenal sebagai micro framework peranakannya laravel yang lebih ringan dan cepat karena hanya diisi oleh fitur utama.
Saya cukup terkejut dengan hasil tesnya yang bisa sangat jauh dengan laravel. Lumen mampu menampilkan response yang sama dalam waktu sekitar 30-50 ms yang berarti dalam hal ini 6x lebih cepat dari laravel. Tentunya hal yang wajar, karena lumen hanya melakukan load library yang penting saja.
3. PHP Native
Rasanya seperti kembali ke masa sekolah.. PHP native yang saya tes kali ini hanya berisi 1 file .php yang hanya mengambil data dari database, lalu menampilkannya dalam format json. Dengan kata lain tidak ada library apapun yang digunakan selain PDO.
Ternyata hasilnya sangat cepat jauh sekali! Response didapat dalam waktu sekitar 3-10ms. Dari sini saja saya sudah dapat sedikit pencerahan, semakin banyak file php yang diproses, tentunya semakin lama juga durasi bootingnya. Hal yang sangat wajar bukan?
4. Go dengan framework Go-Kit
Go-Kit merupakan kumpulan library yang cukup lengkap untuk membangun microservice dengan Go. Dalam tes ini saya hanya membuat 1 service yang menampilkan data yang persis sama seperti yang lain.
Hasilnya bagi saya sangat memuaskan, response diberikan dalam waktu sekitar 10-30ms, sedikit lebih cepat dari lumen. Mirip seperti framework PHP yang meload banyak library sekaligus, gokit pun juga melakukan load pada beberapa module utama yang dibutuhkan. Hanya saja bedanya Go merupakan bahasa berbasis compiler sehingga lebih teroptimasi dibandingkan PHP yang intepreter.
5. Go Native
Dalam versi paling sederhananya dimana go hanya dibuat dalam 1 file, dan hanya memanggil module-module basic yang dibutuhkan, ternyata hasilnya masih didalam ekspektasi saya : cepat.
Response didapat dalam waktu sekitar 2-10ms. Hampir tidak jauh berbeda dengan PHP native, mungkin sesekali sempat dapat response 1ms yang membuat kesan Go ini sedikit lebih cepat dari PHP.
Rangkuman hasil speed testnya adalah sebagai berikut :
- PHP Laravel ternyata memiliki response time paling lama dibandingkan yang lain. Saya pikir hal tersebut cukup wajar karena laravel secara default memang memiliki fitur yang sangat lengkap. Konon memang hukumnya begitu : semakin mudah digunakan = semakin lambat. (OOT : contoh lainnya wordpress, sangat mudah digunakan bukan? artinya secara performa ........ )
- PHP adalah bahasa interpreter, jadi sebenarnya memang kurang adil jika dibandingkan dengan Go atau bahasa compiler lainnya. Akan tetapi PHP ternyata mampu memberikan response dalam durasi yang hampir mendekati Go. Yang suka ngerasa sok keren ketika bilang PHP itu lambat dan outdate, kalian itu jahat.
- Sekalipun secara sekilas performa PHP dan Go tidak jauh berbeda, bukan berarti keduanya bisa dianggap sama dan setara. Jangan lupa kalau setiap bahasa pemrograman memiliki karakter dan fitur yang berbeda. Lebih baik fokus ke kebutuhan (dan budget tentunya), misalnya PHP lebih cocok digunakan untuk project low budget yang tidak terlalu membutuhkan concurrency data yang tinggi.
- Masalah performa bukan hanya terletak di bahasa pemrogramannya, tapi di cara menggunakan bahasanya. Mau bahasa pemrograman ter-OK sekalipun, tapi kalau codingnya masih terjebak N+1, database tidak dioptimasi, tidak memaksimalkan cache, manajemen variabel kurang baik atau sebagainya, saya rasa sih sama saja lambatnya.