Memuat Service Container di Laravel 5 pada Kondisi Tertentu


Karena komunitasnya yang cukup besar, tentulah dukungan akan Laravel begitu banyak tersedia. Salah satunya adalah librari, ada yang bersifat agnostic-framework, ada juga yang dibangun khusus untuk framework tersebut. Berbagai developer di seluruh dunia berlomba-lomba membuat librari siap pakai dan dibagikan secara bebas di repositori seperti Github.

Hal ini memberikan sisi positif bagi programmer untuk fokus ke sisi bisnis dan produktivitas dalam pengembangan aplikasi. Semisal, untuk memanipulasi gambar, tanpa harus membuang waktu menulis librari dari baru, alangkah lebih baik menggunakan yang sudah ada dan teruji, seperti Intervention Image misalnya. Don’t reinvent the wheel istilahnya.

Don’t Reinvent The Wheel, Unless You Plan on Learning More About Wheels.

Di sisi lain, hal tersebut juga memberikan efek buruk bagi programmer dan aplikasi itu sendiri. Dengan mengabaikan efek buruk bagi programmer akan bertebarannya librari siap pakai, mari kita fokus pada sisi buruk pada aplikasi yang sedang kita bangun.

Mari kita ambil contoh. Semisal dalam pengembangan kita menggunakan librari Langman untuk Laravel. Ketika berada di environment local, librari tersebut bisa meningkatkan produktivitas. Namun di lingkungan production, librari tersebut malah hampir tak pernah digunakan, yang berakibat pada terbuangnya sumber daya dengan percuma. Padahal, ini baru satu librari. Dan tentunya, ada banyak librari serupa yang berjalan di environment production dan berpotensi memperlambat kinerja aplikasi. Sebagai pengalaman buruk, saya pernah menyaksikan aplikasi yang dibangun menghabiskan memori sebesar 20MB untuk sekali request karena lupa mematikan Laravel Debugbar.

Lantas, bagaimana sebaiknya? Ialah memuat (load) service container librari tersebut sesuai dengan kebutuhan.

Sebelumnya, jika kita menambahkan service provider Themsaid\Langman\LangmanServiceProviderpada config/app.php dalam tutorial terdahulu, kini service provider tersebut dimuat dari berkas app/Providers/AppServiceProvider.php. Selengkapnya dapat dilihat pada potongan kode di bawah.

<?php
 
namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        if (app()->environment() === 'local') {
            $faker = \Faker\Factory::create('id_ID');
            view()->share('faker', $faker);
        }
    }
 
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        if (app()->environment() === 'local') {
            // only available on local env
            $this->app->register(\Themsaid\Langman\LangmanServiceProvider::class);
        }
    }
}

Dapat dilihat dalam method boot(), saya menggunakan librari Faker agar dapat digunakan dalam view. Di method kedua, yaitu register(), saya mendaftarkan provider Langman. Baik variabel $faker dan fungsi yang disediakan oleh Langman, hanya dapat digunakan apabila status environment berada dalam posisi local. Pengaturan environment sendiri dapat dilihat pada berkas .env.

Tak Berkategori

Yugo Purwanto

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

1 comment

Tinggalkan Balasan