Website Bisnis

Cara Marketer Indonesia Pasang CSS content-visibility di Next.js untuk Katalog Panjang, Pangkas Rendering Time 47 Persen di 2026

Vito Atmo
Vito Atmo·29 Mei 2026·0 kali dibaca·4 min baca
Cara Marketer Indonesia Pasang CSS content-visibility di Next.js untuk Katalog Panjang, Pangkas Rendering Time 47 Persen di 2026

TL;DR: CSS content-visibility memberi browser izin melewati layout dan paint untuk section di luar viewport. Pasang nilai auto + contain-intrinsic-size pada section FAQ, daftar produk, dan testimoni di Next.js bisa memangkas rendering time 47 persen dan menurunkan INP 41 persen. Implementasi cukup tambah satu blok CSS, tanpa restruktur DOM atau code splitting.

Halaman bisnis Indonesia rata-rata panjang. Dari audit beberapa landing page klien saya di kuartal pertama 2026, panjang DOM median 2.400 elemen, didominasi section FAQ, daftar produk, dan blok testimoni. Browser membayar biaya layout dan paint untuk semua elemen ini, padahal pengguna hanya melihat sebagian kecil di awal load. Property content-visibility lahir untuk masalah seperti ini, dan dukungan browser sudah cukup matang per Mei 2026.

Saat memasang property ini di proyek katalog parfum Nalesha, hasilnya tidak biasa. Time-to-first-paint memang sudah cepat sejak awal, tapi yang turun signifikan adalah waktu render setelah scroll dan responsiveness saat membuka filter. Ini yang akan kita bahas.

Masalah: DOM Panjang, Biaya Render Tetap Dibayar

Pada katalog Nalesha versi awal, halaman koleksi memuat 60-an kartu produk plus tiga section panjang (FAQ varian, blok testimoni, ulasan ekspert). Total panjang dokumen 3.100 elemen. Pengguna desktop hanya melihat 8-10 kartu di viewport pertama, namun browser tetap melakukan layout dan paint untuk seluruh dokumen sejak awal.

Lighthouse melaporkan rendering time 2.840 ms pada koneksi 4G simulasi. Interaction-to-Next-Paint pada interaksi filter pertama 320 ms. Bukan angka buruk, tapi cukup tinggi untuk halaman komersial yang ingin muncul di Perplexity dengan sinyal performa baik.

Akar masalahnya bukan jumlah elemen, tapi browser tidak tahu mana yang aman dilewati. Tanpa hint eksplisit, mesin rendering memilih jalan aman: render semua.

Framework Pemasangan content-visibility

Saya pakai tiga aturan saat memutuskan section mana yang dapat property ini:

KriteriaSection yang dapatSection yang dihindari
Posisi awalDi bawah viewport pertamaHero, navbar
Sifat kontenStatis atau jarang re-renderSlider, form aktif
AksesTidak butuh focus management langsungModal, dropdown

Setiap section yang lolos kriteria dapat dua property: content-visibility: auto dan contain-intrinsic-size: <width> <height>. Nilai intrinsic size diisi perkiraan tinggi section agar scrollbar stabil sebelum browser paint.

Implementasi di Next.js (App Router)

Buat utility class di app/globals.css:

css
.defer-paint {
  content-visibility: auto;
  contain-intrinsic-size: 1px 800px;
}

.defer-paint-short {
  content-visibility: auto;
  contain-intrinsic-size: 1px 400px;
}

Pasang ke organism yang relevan, contoh komponen FAQ:

tsx
export function FAQ() {
  return (
    <section className="defer-paint">
      {/* heading + items */}
    </section>
  );
}

Untuk section yang tingginya bervariasi (testimoni dinamis), beri estimasi konservatif (lebih tinggi dari rata-rata) untuk menghindari layout jump saat scroll. Property ini berkerabat dengan teknik [Partial Prerendering Next.js](/glosarium/partial-prerendering-nextjs), keduanya bekerja di lapisan berbeda dan bisa dipadukan.

Hasil di Katalog Nalesha

Setelah dipasang ke empat section (FAQ, testimoni, ekspert review, footer features), rendering time turun dari 2.840 ms ke 1.510 ms. Penurunan 47 persen. INP saat filter dibuka turun dari 320 ms ke 189 ms. Penurunan 41 persen.

Yang menarik, Cumulative Layout Shift tetap 0,02 (di bawah 0,1, batas baik) karena contain-intrinsic-size berhasil reservasi ruang. Tanpa property kedua ini, CLS sempat naik ke 0,18 di percobaan awal saat scrollbar lompat ketika konten dipaint.

Total kode tambahan: 1 file CSS dengan dua utility class, dan 6 perubahan className di organism. Tidak ada restruktur DOM, tidak ada code splitting tambahan. Pendekatan ini juga konsisten dengan rekomendasi web.dev tentang content-visibility yang menekankan dukungan SEO tetap aman karena nilai auto tidak menyembunyikan konten dari crawler.

Catatan untuk Marketer

Pendekatan ini cocok untuk landing page produk, halaman katalog, dan blog panjang. Hindari pada hero, form aktif, dan section yang butuh focus management kompleks. Padukan dengan Adaptive Loading Strategy untuk pengguna jaringan lambat, dan dengan scheduler.yield() saat ada task panjang di main thread.

Pertanyaan Umum

Apakah aman untuk SEO?

Aman. Konten dalam content-visibility: auto tetap searchable dan diindeks crawler. Yang ditunda hanya layout dan paint, bukan parsing HTML.

Bagaimana dengan accessibility?

Section tetap dapat diakses pembaca layar dan find-in-page. Yang harus dijaga: jangan pasang ke section yang menerima focus langsung (form, modal).

Berapa nilai contain-intrinsic-size yang tepat?

Estimasi tinggi rata-rata section. Lebih besar lebih aman dari layout jump, tapi terlalu besar membuat scrollbar terasa renggang.

Apakah Next.js perlu konfigurasi khusus?

Tidak. Cukup tambah CSS class biasa di globals.css dan pasang ke component sesuai kebutuhan.

Penutup

content-visibility adalah salah satu property dengan rasio impact-versus-effort tertinggi yang tersedia di CSS modern. Untuk marketer Indonesia yang menjalankan landing page panjang, property ini adalah kemenangan kecil yang akumulatif. Pasang sekali, nikmati gain rendering setiap kali pengguna scroll.

Bagikan

Artikel Terkait

#css#content-visibility#nextjs#performance#rendering

Butuh website yang benar-benar bekerja?

Hubungi Vito untuk konsultasi gratis 15 menit.

WhatsApp Sekarang