~ We are changing the world with technology. ~

Matt Mullenweg

Tips Optimasi Meningkatkan Performance Laravel

Tips Optimasi Meningkatkan Performance Laravel

1443 Dilihat

Pendahuluan

Performance menjadi sebuah titik perhatian yang cukup menarik bagi para pemilik aplikasi, bagaimana tidak, selain kaya akan fitur dan sesuai dengan yang diinginkannya, ada hal yang tidak kalah penting yakni persoalan tingkat kecepatan penggunaan sebuah aplikasi harus diperhatikan bagi developer. Karena tingkat kecepatan tersebut akan mempengaruhi pengalaman user dalam menggunakannya.

Banyak faktor yang menjadi penyebab dalam mempengaruhi performance sebuah aplikasi, utamanya dalam kategori website, salah satu diantaranya adalah kemampuan developer dalam meminimalkan load data yang berjumlah besar. Terlepas dari itu semua, pada artikel kali ini kita akan membahas bagaimana mengoptimasi performace aplikasi yang kita buat menggunakan Laravel. Berikut Tips Optiomasi dalam Meningkatkan Performance Laravel.

Baca Juga: Aplikasi Laundry (Laravel 5.8 - Vue.js - SPA) #4: Management Couriers

How To Improve Laravel Performance

Kesadaran Taylor Otwell akan pentingnya optimasi dalam mempengaruhi performance sebuah aplikasi, maka secara default Laravel telah menyediakan beberapa opsi, diantaranya:

Config Caching

Laravel menyediakan fungsi untuk membuat caching konfigurasi menggunakan artisan command-nya. Fungsi ini sangat berguna untuk meningkatkan performance. Adapun command-nya adalah:

php artisan config:cache

Namun hal yang perlu diperhatikan adalah ketika command di atas dijalankan maka segala bentuk perubahan pada config tidak akan memberikan efek sesuai perubahan yang telah dilakukan, hal tersebut terjadi karena config-nya telah di-duplicate sehingga ketika aplikasi berjalan maka secara otomatis Laravel framework akan menggunakan config yang telah di-cache tersebut. Apabila kamu ingin meng-update cache config tersebut, maka cache yang telah ada bisa dibersihkan dengan command:

php artisan config:clear

Routes Caching

Routing telah menjadi bagian yang penting utamanya dalam aplikasi yang dibangun dengan Laravel, karena seluruh page yang diakses akan mengecek apakah sudah didefinisikan di dalam routing atau belum. Maka fungsi caching juga dapat menunjang kecepatan akses aplikasi yang sedang kita develop, adapun command-nya serupa dengan menggunakan artisan command:

php artisan route:cache

Serupa dengan config caching, konfigurasi routes juga akan dibuat cache-nya sehingga perubahan setelahnya tidak akan memberikan efek apapun. Bersihkan cache-nya dengan command:

php artisan route:clear

Classmap Optimization

Sebagai sebuah framework yang men-cover berbagai macam kebutuhan, maka Laravel menggunakan sistem yang cukup kompleks dimana habits-nya adalah ketika terjadi sebuah request maka Laravel akan menyertakan semua file yang terkait agar request tersebut dapat diproses. Artisan command yang satu ini akan memecahkan masalah tersebut dengan menggabungkan seluruh komponen yang dibutuhkan ke dalam single file, sehingga waktu yang dibutuhkan menjadi lebih sedikit, adapun command-nya adalah:

php artisan optimize --force

Minimalkan Penggunaan Library / Package

Julukan sebagai salah satu framework populer adalah dengan banyaknya orang yang berpartisipasi dalam membuat library atau package yang dapat digunakan secara umum guna menunjang pekerjaan diri sendiri khususnya atau pekerjaan para developer yang membutuhkan pada umumnya. Banyaknya ketersediaan library tentu saja menjadi kabar gembira, akan tetapi memiliki dampak yang cukup signifikan dalam mempengaruhi kinerja dari aplikasi yang sedang kita buat. Penambahan library akan menambahkan daftar kompleksitas aplikasi kita untuk menelusuri bagian terkait ketika terjadi request pada aplikasi tersebut.

Oleh karena itu, menjadi sangat penting untuk me-review library yang akan digunakan atau apabila anda dapat menyelesaikan masalah tersebut dengan code anda sendiri tanpa harus meng-install library dari pihak ketiga, maka sebaiknya hapus bagian-bagian library yang sudah tidak digunakan lagi dari /config/app.php dan tentu saja dari composer.json.

Optimize Query

Query memiliki dampak yang cukup signifikan dalam menyajikan data agar dapat diolah oleh aplikasi dan biasanya kecepatan sebuah request yang memiliki query didalamnya akan bergantung seberapa cepat query tersebut dapat memberikan response data yang diminta oleh request tersebut.

Dalam artikel Rekomendasi Package Laravel Yang Dapat Memudahkan Pekerjaan Kamu, Saya telah merekomendasikan sebuah package yang berguna untuk tujuan development, package tersebut adalah Laravel debugbar. Dengan menggunakan package tersebut kita dapat melihat seberapa banyak query yang di-load pada halaman yang sedang diakses, sehingga memudahkan kamu dalam melakukan optimize atau meminimalkan query yang digunakan.

Gunakan Eager Loading Untuk Data Yang Berelasi

Eloquent dari Laravel memiliki keistimewaan dalam mengelola query yang cukup kompleks, salah satu fiturnya adalah Eager Loading. Dengan fitur ini kita dapat meminimalisir menumpuknya query yang terjadi ketika me-load data yang berelasi, sebagai contoh ketika menggunakan "lazy loading", maka query-nya akan menjadi seperti ini:

$books = App\Book::all();

foreach ($books as $book) {
    echo $book->author->name;
}

Hasil perulangan diatas akan mengeksekusi 1 query untuk mengambil semua data dari table books dan yang menjadi masalah adalah di dalam looping kita memanggil data yang berelasi sehingga setiap looping akan membuat sebuah query lagi. Bayangkan jika ada banyak data yang di-looping maka akan sebanyak itu pula query yang akan tercipta.

Laravel menawarkan fitur "eager loading" untuk mengatasi hal tersebut, sehingga dari contoh diatas hanya akan tercipta dua buah query, pertama untuk mengambil semua data buku dan yang kedua adalah untuk mengambil semua data yang berelasi dengannya. Fungsi untuk menggunakan eager loading adalah dengan method with()

$books = App\Book::with('author')->get();

foreach ($books as $book) {
    echo $book->author->name;
}

Cache Query Results

Lagi lagi data memiliki peranan penting dimana ketika terjadi request dan ada query di-dalam nya maka kecepatan response akan bergantung pada kecepatan penyajian data yang dilakukan oleh query. Untuk mengatasi hal tersebut, kita dapat memanfaatkan fitur cache dari Laravel, dimana secara default ketika ada request, data yang di cek terlebih dahulu adalah data yang berada pada cache. Apabila data tersebut tidak ditemukan, maka barulah fungsi query ke database akan dijalankan.

$value = Cache::remember('users', $minutes, function () {
    return DB::table('users')->get();
});

Assets Building & Minifying

Laravel mix merupakan salah satu fitur default yang dimiliki oleh Laravel. Fitur ini memiliki kemampuan untuk melakukan compiling assets menggunakan webpack builder sehingga penggunaan assets yang cukup banyak dapat di kelompokkan menjadi satu. Tujuannya adalah untuk menekan jumlah HTTP request terhadap setiap assets yang di-load, maka dengan cara seperti ini, load aplikasi kita akan menjadi lebih cepat.

mix.styles([
    'public/css/vendor/normalize.css',
    'public/css/vendor/videojs.css'
], 'public/css/all.css');

Note: Kedua file css, normalize.css dan videojs.css akan di-build kembali menjadi satu file dengan nama all.css

Hal menarik lainnya adalah Laravel mix juga memiliki kemampuan untuk membuat assets menjadi minify dengan command:

npm run production

Set Mod Expires

Mod expires terkadang menjadi pembahasan dalam bidang SEO, dimana fungsi ini adalah untuk melalukan caching dengan memberikan informasi kepada browser agar dapat diingat dalam memory internal browser yang digunakan oleh user. Hal ini tentu saja dapat menjadi penunjang untuk meningkatkan performance dari aplikasi yang sedang kita buat.

## EXPIRES HEADER CACHING ##
<IfModule mod_expires.c>
# Fonts
# Add correct content-type for fonts
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-ttf .ttf
AddType application/x-font-opentype .otf
AddType application/x-font-woff .woff
AddType image/svg+xml .svg
ExpiresActive On
ExpiresByType image/jpg “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType application/pdf “access plus 1 month”
ExpiresByType text/javascript “access plus 1 month”
ExpiresByType application/javascript “access plus 1 month”
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType application/x-shockwave-flash “access plus 1 month”
ExpiresByType image/x-icon “access plus 1 month”
ExpiresByType image/ico “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType text/css “now plus 1 month”
ExpiresByType application/vnd.ms-fontobject “access plus 1 month”
ExpiresByType application/x-font-ttf “access plus 1 month”
ExpiresByType application/x-font-opentype “access plus 1 month”
ExpiresByType application/x-font-woff “access plus 1 month”
ExpiresByType image/svg+xml “access plus 1 month”
ExpiresByType text/html “access plus 600 seconds”
ExpiresDefault “access plus 2 days”
</IfModule>

Use Latest Version of PHP

Terjadinya pembaharuan dalam bidang apapun itu, bukan hanya agar bahasa pemrograman tersebut dikatakan hidup, akan tetapi developer-nya pasti telah melakukan banyak improvement guna menunjang kebutuhan saat ini. Maka dari itu, jangan malas untuk melakukan pembaharuan setiap hal yang kita gunakan, utamanya bahasa pemrograman.

Baca Juga: Mengolah Data Relasi Antar Table Menggunakan Eloquent

Kesimpulan

Perubahan tingkatan performance sebuah aplikasi akan mempengaruhi pengalaman user yang menggunakannya sehingga hal tersebut akan memberikan feedback yang baik dari user. Selain aplikasi yang kaya akan fitur, maka aplikasi yang cepat dan mudah digunakan menjadi faktor penting yang mempengaruhi seberapa bermanfaat aplikasi tersebut bagi penggunanya.

Full Stack Developer & Remote Worker salah satu perusahaan asal Australia. Senang dengan teknologi baru. Laravel addict yang tidak fanatik. Merekam jejak dengan menulis

Aplikasi Laundry (Laravel 5.8 - Vue.js - SPA) #12: Payment & Detail Transaksi Laravel VueJS

Aplikasi Laundry (Laravel 5.8 - Vue.js -...

Setelah menyelesaikan fitur untuk mencatat transaksi yang telah dilakukan oleh user, maka tugas selanjutnya adalah membuat fitur untuk meng-input data pembayaran. Setiap transaksi memiliki 1 data pemb...

Aplikasi Laundry (Laravel 5.8 - Vue.js - SPA) #11: Modul Transaksi Part 3 Laravel VueJS

Aplikasi Laundry (Laravel 5.8 - Vue.js -...

Titipan cerita dari part sebelumnya dimana terdapat bug tentang waktu yang dibutuhkan untuk mengerjakan pesanan sesuai layanan yang digunakan oleh pelanggan. Maka pada seri membuat aplikasi laundry la...

Aplikasi Laundry (Laravel 5.8 - Vue.js - SPA) #10: Modul Transaksi Part 2 Laravel VueJS

Aplikasi Laundry (Laravel 5.8 - Vue.js -...

Adapun schema yang diinginkan untuk form customer adalah ketika user ingin menambahkan customer baru, maka terdapat sebuah tombol untuk membuka form tersebut. Jika penambahan data customer berhasil di...

Komentar