05 — Catatan teknik
Default ke server
Kenapa sebagian besar halaman institusi sebaiknya dirender sebelum sampai ke browser, dan di mana aturan itu berhenti.
Sebagian besar situs yang saya rawat lebih sering dibaca daripada diinteraksikan. Profil program studi, berita, dokumen akreditasi, daftar dosen — kasus umumnya adalah orang datang dari hasil pencarian, membaca, lalu pergi.
Untuk kasus itu, halaman server-rendered adalah hal paling sederhana yang bekerja:
- Konten ada di response pertama.
- Halaman tetap terbaca kalau JavaScript gagal.
- HTML itulah yang dilihat mesin pencari dan pratinjau tautan.
- Tidak ada langkah hidrasi yang bisa salah.
Tidak ada yang baru. Yang layak ditulis adalah seberapa sering keputusan sebaliknya diambil dengan alasan yang tidak berlaku.
Daya tariknya
Client-side rendering adalah default di banyak stack modern, dan itu default yang baik untuk aplikasi: dashboard, editor, runner ujian, apa pun yang punya state terus-menerus. Begitu tim nyaman dengan model itu, ia mulai terasa seperti cara normal membangun semua hal.
Biayanya muncul belakangan:
- Halaman konten yang butuh spinner untuk menampilkan teks.
- Layar kosong saat panggilan API gagal.
- Metadata yang harus direkonstruksi untuk crawler.
- Bundle JavaScript yang tumbuh untuk fitur yang jarang dipakai pengunjung.
Halamannya tetap berfungsi, jadi tidak ada yang memaksa masalahnya dibahas. Ia hanya jadi lebih lambat dan lebih rapuh dari yang seharusnya.
Di mana saya menarik batas
Saya memakai server rendering sebagai default dan menambahkan interaktivitas klien saat alur kerja benar-benar membutuhkannya:
| Kebutuhan | Pendekatan |
|---|---|
| Konten publik | Server-rendered, bisa di-cache |
| Form dan validasi | Server action atau endpoint, enhancement klien ringan |
| Interaksi berjalan lama | Komponen klien, batas eksplisit |
| Perilaku offline | Buffer klien dengan server sebagai otoritas |
Platform ujian adalah contoh paling jelas untuk dua baris terakhir. Ia butuh runner di klien dan buffer jawaban lokal, tetapi server tetap menjadi otoritas untuk waktu dan pengumpulan. Situs publik di sekitarnya tidak butuh itu sama sekali.
Apa yang bukan
Ini bukan argumen melawan React, Next.js, atau state klien. Runner ujian dibangun dengan React karena antarmukanya stateful dan kompleks. Argumennya melawan penggunaan arsitektur stateful untuk halaman yang pada dasarnya adalah dokumen.
Tes yang berguna: kalau halaman itu bisa berfungsi sebagai lembar cetak, render sebagai dokumen dulu dan tambahkan perilaku hanya di titik analogi kertasnya patah.
Tes itu sudah menyelamatkan saya dari banyak kompleksitas yang tidak perlu.