โ† Semua pembelajaran / Laravel Nol โ†’ Enterprise
Fase 1 ยท Request, Routing & Blade

Daur hidup request

Laravel bukan kotak ajaib. Setiap permintaan menempuh jalur yang sama dan bisa dilacak. Memahaminya sekarang membuat worker mode di Fase 8 masuk akal, bukan menakutkan.

Sumber asli laravel.com Resmi Rangkuman ~6 menit baca

Intisari

  • Semua permintaan masuk lewat satu file: public/index.php. Tidak ada file PHP lain yang boleh diakses publik.
  • Urutannya: autoload โ†’ bootstrap/app.php โ†’ service provider (register lalu boot) โ†’ middleware โ†’ rute โ†’ controller โ†’ response.
  • Semua provider di-register dulu, baru semuanya di-boot. Ini alasan kenapa register tidak boleh memakai layanan lain.
  • Di mode klasik (PHP-FPM), seluruh rangkaian ini diulang setiap permintaan lalu dibuang.
  • Di worker mode, langkah bootstrap hanya sekali โ€” dan itulah sumber kecepatannya sekaligus sumber jebakannya.

Perjalanan satu permintaan

  1. public/index.php โ€” satu-satunya pintu. Web server mengarahkan semua URL ke sini.
  2. Autoloader Composer dimuat, sehingga semua kelas bisa ditemukan.
  3. bootstrap/app.php membangun instance Application โ€” inilah service container.
  4. Service provider di-register โ€” semuanya, satu per satu. Tahap ini hanya mendaftarkan cara membuat objek; belum ada yang dijalankan.
  5. Service provider di-boot โ€” sekarang seluruh layanan sudah terdaftar, jadi provider boleh saling memakai.
  6. Middleware global dilewati: penanganan sesi, verifikasi CSRF, dan apa pun yang kamu tambahkan.
  7. Router mencocokkan metode HTTP + URI, menjalankan middleware milik rute itu.
  8. Controller berjalan, mengembalikan sesuatu.
  9. Nilai kembalian diubah jadi Response, melewati middleware dalam urutan terbalik, lalu dikirim.
  10. Terminate โ€” middleware yang punya method terminate() dijalankan setelah respons sampai ke pengguna.

Kenapa register dan boot dipisah. Kalau provider A mencoba memakai layanan milik provider B di dalam register, urutan pemuatan menentukan apakah kodemu jalan โ€” dan urutan itu bisa berubah saat kamu menambah paket. Dengan pemisahan ini, boot dijamin berjalan saat semua layanan sudah terdaftar. Aturannya sederhana: register hanya mengikat, boot boleh memakai.

Sekali jalan, lalu dibuang

Di mode PHP tradisional (PHP-FPM atau php artisan serve), sepuluh langkah di atas dijalankan penuh untuk setiap permintaan. Semua objek dibangun, semua provider di-boot, lalu seluruh memori proses dibuang begitu respons terkirim.

Mode klasik (PHP-FPM)Worker mode (Fase 8)
Langkah 1โ€“5Setiap permintaanSekali, saat proses menyala
Langkah 6โ€“9Setiap permintaanSetiap permintaan
Kebocoran memoriTidak mungkin bertahanMenumpuk sampai worker di-restart
Variabel statisSelalu bersihBertahan antar permintaan
Biaya bootstrapDibayar terus-menerusDibayar sekali

Kolom kanan itu isi Fase 8 secara keseluruhan. Tabel ini sengaja diletakkan di awal supaya saat kita sampai ke FrankenPHP dan RoadRunner, yang berubah cuma satu hal โ€” dan kamu sudah tahu hal apa.

Melihatnya sendiri

// routes/web.php โ€” tempel sementara untuk mengintip urutannya
Route::get('/debug-lifecycle', function () {
    return [
        'providers_termuat' => count(app()->getLoadedProviders()),
        'sudah_boot'        => app()->isBooted(),
        'environment'       => app()->environment(),
        'waktu_bootstrap'   => round((microtime(true) - LARAVEL_START) * 1000, 2).' ms',
    ];
});

Konstanta LARAVEL_START didefinisikan di baris pertama public/index.php. Angka yang muncul adalah biaya bootstrap yang di Fase 8 akan kita hapus hampir seluruhnya.

Yang paling sering disalahpahami: "Laravel lambat". Yang lambat biasanya bukan Laravel, melainkan fakta bahwa framework sebesar apa pun harus dibangun ulang tiap permintaan di model PHP klasik โ€” plus query N+1 yang belum ketahuan. Dua-duanya punya obat, dan dua-duanya ada di roadmap ini: Fase 2 untuk query, Fase 8 untuk bootstrap.

Latihan: pasang rute di atas, muat sepuluh kali, dan catat rentang waktu_bootstrap-nya. Simpan angka itu. Di akhir Fase 8 kamu akan mengukur ulang hal yang sama dengan FrankenPHP dan membandingkannya โ€” jauh lebih meyakinkan daripada membaca benchmark orang lain.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.