Pentingnya Menggunakan Route Cache dan Config Cache


Jika kita menampilkan semua perintah Artisan Console — menggunakan php artisan — melalui terminal, akan terlihat beberapa perintah yang berhubungan dengan cache, dua di antaranya adalah config:cache dan route:cache. Contoh penggunaan dua perintah tersebut adalah sebagai berikut:

$ php artisan route:cache
$ php artisan config:cache

Seperti kita tahu, dalam aplikasi yang berbasis Laravel, dimungkinkan membuat lebih dari satu berkas config dan route. Semua berkas-berkas tersebut, dimuat oleh bootstrap Laravel untuk kemudian dieksekusi.

Tergantung dari jenis berkasnya, Laravel memperlakukannya berbeda-beda. Sebagai contoh, berkas route misalnya. Dimuat lebih awal untuk menentukan request berdasarkan URI. Berkas config sebagai contoh lainnya, digunakan sebagai pre-defined data untuk menentukan nilai yang dinamis namun sifatnya jarang sekali berubah.

Dalam PHP, memuat banyak berkas tentu saja memakan sumber daya yang tak sedikit. Apalagi route dan config yang digunakan dalam Laravel jumlahnya mencapai puluhan (atau bahkan ratusan?).

Untuk membuktikannya, mari kita test benchmark menggunakan Apache Bench.

Dalam pengujian, ujicoba pertama tanpa menggunakan cache, baik untuk config maupun route. Pengujian kedua, menggunakan cache untuk kedua komponen. Semua pengujian menyimulasikan request sebanyak 1.000 dengan concurrency 100.

Benchmark Aplikasi Web Menggunakan Apache Bench

Tanpa Menggunakan Cache

Concurrency Level:      100
Time taken for tests:   14.851 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      1344040 bytes
HTML transferred:       324000 bytes
Requests per second:    67.33 [#/sec] (mean)
Time per request:       1485.122 [ms] (mean)
Time per request:       14.851 [ms] (mean, across all concurrent requests)
Transfer rate:          88.38 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3   8.1      0      29
Processing:   109 1430 535.7   1365    7663
Waiting:      109 1406 531.4   1347    7495
Total:        138 1433 532.1   1365    7663

Menggunakan Cache

Concurrency Level:      100
Time taken for tests:   13.597 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      1344162 bytes
HTML transferred:       324000 bytes
Requests per second:    73.55 [#/sec] (mean)
Time per request:       1359.695 [ms] (mean)
Time per request:       13.597 [ms] (mean, across all concurrent requests)
Transfer rate:          96.54 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   3.7      0      13
Processing:    45 1318 567.4   1245    5480
Waiting:       45 1299 565.4   1225    5430
Total:         52 1319 565.8   1245    5480

Dapat dilihat pada hasil pengujian di atas, hasinya cukup signifikan, baik untuk time taken maupun request per second.

Pengembang Laravel menyadari bahwa hal di atas mempengarui performa aplikasi, itulah kenapa dua perintah Artisan Console di atas disediakan untuk menjaga performa aplikasi tetap optimal.

Jadi, apa yang sebenarnya terjadi jika menggunakan dua perintah di atas?

$ php artisan config:cache

Configuration cache cleared!
Configuration cached successfully!

Mari kita mulai dari config.

Laravel akan menghapus cache sebelumnya (jika ada), kemudian membuat cache baru dengan cara mengambil semua key array pada berkas-berkas yang ada dalam direktori config. Semua array dalam berkas config dikumpulkan pada satu berkas dalam direktori bootstrap/cache/config.php. Tidak usah khawatir akan terjadi konflik key array. Selama berada dalam berkas yang berbeda, Laravel akan mengelompokkannya ke dalam key berdasarkan nama berkas config-nya.

Pun tidak berbeda jauh dengan route cache. Yang membedakan adalah jika config disimpan dalam bentuk raw array — dapat dibaca kasatmata — , maka route disimpan dalam bentuk decoded string menggunakan fungsi base64_encode().

Nah, jadi, ketika berada di level production, pastikan kedua perintah Artisan Command di atas juga dijalankan. Tentunya, hal tersebut tidak perlu diimplementasikan pada local environment. Selain karena tidak begitu berpengaruh besar terhadap performa, pun datanya sering berubah.

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

Tinggalkan Balasan