Quick Test Fitur Baru Laravel 6, Seberapa Efektif Lazzy Collection?

Laravel 6 sudah beberapa minggu ini release. Tentu ada beberapa update fitur-fitur keren yang patut dicoba.

Yang paling menarik perhatian saya adalah Lazzy Collection.

Dari beberapa pengalaman membuat aplikasi selama ini, dalam Laravel, jika ingin me-load data dalam jumlah besar sekaligus maka membuat memory usagenya menjadi membengkak. Ujung-ujungnya bisa membuat server down kalau tidak kuat.

Jadi lazzy collection ini sepertinya menjadi sebuah jawaban keresahan saya selama ini. hahaha ~

Kita akan melakukan testing aja. Testingnya sangat sederhana. Mungkin di komputer berbeda tapi tujuannya hanya ingin tahu perbandingan kalau pakai collection biasa memory usagenya berapa, kalau pakai lazzy collection memory usagenya berapa.

Yuk kita mulai saja.

Step 1. Install laravel 6

create-project --prefer-dist laravel/laravel testing 6.0

Jika sudah terinstall, install juga depedency yang dibutuhkan.

Untuk info mengenai cara install laravel lebih lanjut bisa akses: https://laravel.com/docs/

Step 2. Install debugbar untuk melihat memory usage.

Jika laravel sudah terinstall, tambahkan package debugbar.

composer require barryvdh/laravel-debugbar --dev

Jika laravel sudah terinstall, kamu buka di browser dan harusnya muncul tampilan awal laravel dengan debugbar disebelah bawah.

laravel & debugbar

Step 2. Dummy data & routing

Selanjutnya? Kita perlu dummy data untuk testing. Kita akan generate lewat seeder.

Edit file DatabaseSeeder.php untuk membuat dumy user dengan menggunakan UserFactory.php yang sudah ada.

<?php

use App\User;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        
        factory(User::class, 100000)
		        ->create();
    }
}

Run migration dan seeder.

php artisan migrate:install

php artisan db:seed

Kamu bisa cek jika table sudah berhasil di migrate dan data user sudah terisi.

Buat 2 route baru untuk testing collection biasa dan lazzy collection.

<?php


Route::get('/', function () {
    $users = \App\User::cursor();
	foreach ($users as $key => $value) {
		echo $value->id;
	}
    return 1;
});

Route::get('/2', function () {
    $users = \App\User::all();
    foreach ($users as $key => $value) {
		echo $value->id;
	}
    return 1;
});

Jadi route pertama : http://127.0.0.1:800/ akan menggunakan lazzy collection dan http://127.0.0.1:800/2 akan menggunakan normal collection.

Saatnya testing.

Kita lihat perbedaan masing-masing penggunaan memorinya lewat gambar di bawah ini.

Yang kanan lazzy collection. Yang kiri collection biasa.

100.000 data

Untuk load 100.000 data, lazz collection memakai memory 70.22MB sedangkan collection biasa 150.25MB

Ternyata hampir mengurangi setengah kebutuhan ram dibandingkan dengan collection biasa. Keren.

10.000 data

Untuk load 10.000 data, lazz collection memakai memory 7.5MB sedangkan collection biasa 11.17MB

Perbedaan memory usage hampir 50% juga

1000 data

Untuk load 1000 data, lazz collection memakai memory 4.5MB sedangkan collection biasa 5.18MB

Untuk data yang 1000 ke bawah perbedaan memory usagenya tidak terlalu besar sih, tapi masih lebih kecil lazzy loading.

Kesimpulan

Lazzy Collection terbukti mengurangi penggunaan memori saat membutuhkan data besar yang akan diload sekaligus. Tentu ini menjadi sebuah kabar bagi para artisan. Walaupun secara best practice load data sekaligus tidak dianjurkan, maka dengan lazzy collection ini penggunaan memory jadi lebih hemat.

Hi, Saya Agus Yusida

Hello, perkenalkan saya Agus Yusida, seorang freelancer programmer, pernah membuat startup dan suka mencoba hal-hal baru. Jika ada pertanyaan bisa DM saya di IG @yusidajohn untuk fast respond. Jangan lupa like facebook ngide.net ya!

Related Article