Langsung ke konten utama

[Lv1] Optimasi Level Route: Lazy Loading Tiga Lapis

Lazy loading level route mengurangi ukuran JavaScript awal dan meningkatkan kecepatan layar pertama dengan mengirimkan kode sesuai kebutuhan.


Situasi

Dalam produk multi-tenant, setiap tenant sering memiliki tema dan pohon route yang berbeda. Jika semuanya di-bundle secara eager, JavaScript startup menjadi terlalu besar.

Gejala umum:

  • Pemuatan awal lambat pada jaringan mobile
  • Bundle main.js yang besar
  • Kode yang tidak diperlukan untuk route yang tidak pernah dikunjungi pengguna

Tugas

  1. Jaga anggaran JS awal tetap kecil
  2. Muat hanya modul tenant dan route yang diperlukan
  3. Pertahankan kemudahan pemeliharaan dan kecepatan pengembangan

Aksi: Lazy loading tiga lapis

Lapis 1: Modul route dinamis level tenant

// src/router/routes.ts
export default async function getRoutes(siteKey: string) {
const module = await import(`../../template/${siteKey}/router/routes.ts`);
return module.routes;
}

Hanya pohon route tenant yang aktif yang dimuat.

Lapis 2: Lazy import komponen level halaman

const HomePage = () => import('@/pages/HomePage.vue');

export const routes = [
{
path: '/home',
component: HomePage,
},
];

Setiap chunk halaman diunduh hanya saat diperlukan.

Lapis 3: Gerbang route berbasis izin

router.beforeEach(async (to) => {
const allowed = await permissionService.canAccess(to.name as string);
if (!allowed) return '/403';
});

Halaman yang tidak diizinkan diblokir sebelum modul berat dimuat.

Peningkatan tambahan

  • Prefetch route berikutnya yang berkemungkinan tinggi saat idle
  • Pisahkan dependensi bersama yang besar ke dalam vendor chunk
  • Pantau ukuran chunk level route di CI

Hasil

Dampak umum:

  • JS awal berkurang secara signifikan
  • Render layar pertama lebih cepat
  • Time-to-interactive lebih baik pada perangkat kelas rendah

Ringkasan siap wawancara

Saya mengoptimasi route dalam tiga lapis: pemuatan modul tenant, lazy chunk level halaman, dan guard berbasis izin. Ini menjaga startup tetap kecil sambil mempertahankan arsitektur route yang skalabel.