Optimasi Performa Website dengan Astro Island Architecture: Kirim Less JavaScript

Lhuqita Fazry
Web Development Astro Performance
Optimasi Performa Website dengan Astro Island Architecture: Kirim Less JavaScript

Masalah JavaScript yang Terlalu Banyak

Mayoritas framework frontend modern mengirimkan JavaScript ke browser dalam jumlah besar. Setiap komponen, meskipun hanya menampilkan teks statis, seringkali membawa runtime framework yang tidak perlu. Akibatnya, browser harus mengunduh, parse, dan mengeksekusi JavaScript sebelum halaman bisa menampilkan konten — meskipun konten tersebut sebenarnya tidak membutuhkan interaktivitas.

Angka dari HTTP Archive menunjukkan bahwa rata-rata halaman web mengirimkan lebih dari 500 KB JavaScript yang terkompresi. Ketika di-decompress dan dieksekusi, beban CPU pada perangkat mobile menjadi sangat besar. Astro hadir dengan pendekatan berbeda: mengirimkan nol JavaScript secara default, dan hanya menambahkan JavaScript pada komponen yang benar-benar membutuhkan interaktivitas.

Apa Itu Island Architecture?

Island Architecture adalah pola di mana halaman web dirender sepenuhnya di server sebagai HTML statis, dengan "pulau" interaktif kecil yang dihidrasi secara terpisah di client. Konsep ini berlawanan dengan pendekatan SPA (Single Page Application) yang mengirimkan JavaScript bundle besar untuk menghidrasi seluruh halaman sekaligus.

Dalam Astro, setiap komponen UI yang membutuhkan interaktivitas menjadi sebuah "island" — potongan JavaScript terisolasi yang hanya berisi kode yang diperlukan untuk komponen tersebut. Komponen statis seperti header, footer, dan teks tidak mengirimkan JavaScript sama sekali. Hasilnya, halaman jauh lebih ringan dan cepat karena browser hanya memproses bagian yang memang perlu berjalan di client.

Cara Kerja client: Directive di Astro

Astro menggunakan client: directive untuk menandai komponen mana yang perlu dihidrasi di browser. Directive ini menentukan kapan dan bagaimana JavaScript dimuat.

astroastro
---
import InteractiveCounter from '../components/Counter.jsx';
import StaticHeader from '../components/Header.astro';
import NewsletterForm from '../components/Newsletter.jsx';
---

<StaticHeader />
<InteractiveCounter client:load />
<NewsletterForm client:idle />

Tiga directive yang paling sering digunakan:

  • client:load — menghidrasi komponen segera setelah halaman selesai dimuat. Cocok untuk komponen yang langsung terlihat dan interaktif, seperti navigasi atau form utama.
  • client:idle — menghidrasi komponen saat browser sedang idle (menggunakan requestIdleCallback). Ideal untuk komponen yang tidak terlihat langsung atau tidak membutuhkan interaksi segera, seperti newsletter form di bagian bawah halaman.
API Development with Golang
Web App • Beginner

API Development with Golang

A hands-on, project-based course designed to teach beginners how to build robust...

Daftar
  • client:visible — menghidrasi komponen hanya ketika muncul di viewport (menggunakan IntersectionObserver). Pilihan tepat untuk komponen yang berada di bawah fold, seperti carousel atau komentar yang perlu di-scroll terlebih dahulu.
astroastro
---
import ImageCarousel from '../components/Carousel.jsx';
import SearchBar from '../components/Search.jsx';
import CommentSection from '../components/Comments.jsx';
---

<SearchBar client:load />
<ImageCarousel client:visible />
<CommentSection client:idle />

Pemilihan directive yang tepat akan memastikan JavaScript hanya dimuat ketika benar-benar dibutuhkan. Komponen di atas fold yang langsung digunakan pengguna membutuhkan client:load, sedangkan komponen di bawah fold bisa ditunda dengan client:visible atau client:idle.

Integrasi dengan Beberapa Framework

Keunggulan unik Astro adalah kemampuan menggunakan komponen dari berbagai framework dalam satu halaman yang sama. Karena setiap island terisolasi, React, Svelte, dan Vue bisa berdampingan tanpa konflik runtime.

astroastro
---
import ReactCounter from '../components/ReactCounter.jsx';
import SvelteToggle from '../components/SvelteToggle.svelte';
import VueModal from '../components/VueModal.vue';
---

<ReactCounter client:load />
<SvelteToggle client:idle />
<VueModal client:visible />

Setiap framework hanya mengirimkan runtime yang dibutuhkan oleh komponen tersebut. Svelte, yang dikenal dengan bundle size kecil, hanya mengirimkan beberapa kilobyte. React mengirimkan runtime yang lebih besar tetapi tetap terisolasi di island-nya sendiri — tidak mencemari komponen lain. Pendekatan ini memungkinkan migrasi bertahap: tim bisa mulai menggunakan Astro untuk halaman baru sambil mempertahankan komponen lama dari framework yang sudah ada.

Mengukur Dampak Performa

Untuk melihat dampak Island Architecture secara konkret, kita bisa membandingkan bundle size antara halaman Astro dan halaman SPA tradisional. Astro menyediakan perintah bawaan untuk menampilkan statistik bundle.

bashbash
npm run build 2>&1 | grep -i "astro"

Output:

text
 ✓ built in 1.23s
 ∟ dist/client/Counter.4f2a1b.js   2.3 kB
 ∟ dist/client/Toggle.7e3c2d.js     0.8 kB
 ∟ Total island scripts:            3.1 kB
 ∟ Total page JS:                   3.1 kB (0 kB framework runtime)

Angka-angka ini menunjukkan bahwa hanya 3.1 kB JavaScript yang dikirim ke browser — jauh lebih rendah dibandingkan halaman React biasa yang bisa mencapai 40-100 kB terkompresi untuk runtime saja. Halaman Astro tanpa island interaktif mengirimkan 0 kB JavaScript, karena seluruh konten dirender sebagai HTML statis.

Strategi Optimasi Lanjutan

Selain client: directive, Astro menyediakan beberapa fitur untuk optimasi performa lebih lanjut. client:only berguna ketika komponen tidak bisa dirender di server karena bergantung pada browser API seperti window atau document. Directive ini melewati server rendering dan langsung menghidrasi di client.

astroastro
---
import BrowserOnlyChart from '../components/Chart.jsx';
---

<BrowserOnlyChart client:only="react" />

Penggunaan client:only harus selektif karena komponen ini tidak memiliki HTML statis sebagai fallback. Search engine crawler dan pengguna dengan JavaScript disabled tidak akan melihat konten dari komponen client:only. Gunakan directive ini hanya untuk komponen yang memang membutuhkan browser API dan tidak relevan untuk SEO.

Kombinasi Island Architecture dengan Astro View Transitions memberikan pengalaman navigasi yang mulus tanpa reload penuh, sembari tetap menjaga bundle size tetap kecil. Setiap transisi hanya memuat island yang berubah, bukan seluruh halaman.

Ingin mempelajari web development modern secara praktis? Kunjungi kursus dan bootcamp di Rumah Coding untuk membangun proyek nyata dengan teknologi terkini dan mendapatkan guidance dari instruktur berpengalaman.

Course Terkait

EduTrack: Learning Management & Assessment API
Premium Course Web App

API Development with Golang

A hands-on, project-based course designed to teach beginners how to build robust, high-performance RESTful APIs using Golang. Starting from core Go syntax and concurrency, students will progress through routing, database integration, security, and finally containerize their application for production deployment.

Capstone Project

EduTrack: Learning Management & Assessment API

  • Role-Based Access Control (RBAC)
  • Course & Module Management
  • Enrollment & Progress Tracking
7 Weeks Beginner
Lihat Detail Course
Asynchronous Bulk E-Certificate & Notification Engine
Premium Course Web App

Advanced Architecture with Laravel Containers & Queues

A problem-driven, project-based course designed to elevate intermediate developers to a senior architectural mindset. Instead of just memorizing documentation, students will tackle real-world bottleneck issues by mastering the Inversion of Control (IoC) principle, Dependency Injection, and asynchronous background processing. Learn to decouple services and orchestrate robust queues to build scalable, high-performance applications that never freeze under heavy loads.

Capstone Project

Asynchronous Bulk E-Certificate & Notification Engine

  • Decoupled Service Architecture: PDF generation and Email delivery are built as independent, interface-driven services injected via the Service Container.
  • Job Chaining: Ensuring processes run in strict asynchronous order (Generate PDF ➔ Upload to Storage ➔ Send Email).
  • Job Batching & Real-Time Tracking: Grouping hundreds of jobs together and displaying a live progress bar (e.g., "65% Completed") on the admin dashboard.
7 Weeks Intermediate
Lihat Detail Course
Mini Academic Portal (Learning Management System)
Premium Course Web App

Building Modern Apps with Filament

Learn how to build modern, full-stack web applications rapidly using FilamentPHP and the TALL stack. This project-based course is designed for beginners, guiding you step-by-step to create a fully functional backend administration panel. By the end of the course, you will have mastered Filament's powerful Panel Builder, robust CRUD operations, complex database relationships, and interactive dashboards.

Capstone Project

Mini Academic Portal (Learning Management System)

  • Master Data Management: Comprehensive CRUD functionality to manage Instructors and Course catalogs.
  • Student Registry: A dedicated module to manage student profiles and personal information.
  • Dynamic Enrollment System: Handling Many-to-Many relationships to enroll students into specific courses using Filament's pivot features.
7 Weeks Intermediate
Lihat Detail Course

Artikel Terkait