Gambar hero untuk Cara melakukan defer CSS di Astro

Cara melakukan defer CSS di Astro

Dipublikasikan : 20 November 2025
Oleh:

Dalam pengembangan web, skrip CSS dan JS adalah blocking, browser akan berhenti memuat (render) HTML sebelum semua CSS selesai dimuat. Untuk meningkatkan kecepatan loading, kita bisa defer CSS dengan beberapa cara.

Untuk mengatasinya, kita dapat melakukan defer (menunda) pemuatan skrip, terutama yang besar dan berpotensi melakukan blocking pada pemuatan halaman.

Jika di WordPress kita bisa menggunakan plugin seperti WP Rocket, di Astro tidak demikian, kita harus mengeksekusinya di “jantung” Astro; BaseLayout.astro.

Masalah utama blocking

Secara umum, skrip font di inject langsung di src/styles/global.css jika kita menggunakan Tailwind.

Catatan: Jangan ikut ketik tanda backtick   di awal dan akhir kode/perintah, itu cuma penanda blok kode untuk memudahkan penulisan.

Astro secara default adalah SSG, setiap perubahan sekecil apapun harus melalui proses build, karena itu Astro sangat statis, sehingga setiap skrip CSS akan dikunci menjadi file-file CSS seperti dibawah ini.

Baca juga: Cara Melihat Log Email Di WordPress Dengan WP Mail SMTP
URLTransfer SizeDuration
/_astro/slug.q0KO3V-z.css22.5 KiB1,710 ms
/_astro/slug.BXMC-2ZL.css10.3 KiB1,080 ms
/css2?family=Inter:wght@400;500;600;700&display=swap(fonts.googleapis.com)1.5 KiB780 ms

Ini adalah mekanisme dari Astro sebagai SSG, dan pemrosesan Tailwind untuk mengeksekusi font. Jadi kita tidak bisa melakukan alternatif lain, tapi kita bisa mengoptimasinya dengan defer CSS.

Iklan

Solusi untuk render-blocking

Cara paling efektif adalah dengan melakukan defer, tepat di BaseLayout.astro atau file lainnya yang bertanggungjawab terhadap layout utama website.

Jika sebelum defer, kita mengimpor global.css seperti ini:

javascript
import '../styles/global.css'

Maka untuk mengaktifkan defer, kita buat skripnya seperti ini:

javascript
import globalCssUrl from '../styles/global.css?url';

Untuk font, kita impor ulang di BaseLayout.astro (atau file layout utama lainnya).

Iklan
javascript
const googleFontUrl = "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";
---

<head>
  <meta charset="UTF-8">
  <title>My Website</title>


  <!-- 1. Inline Critical CSS -->
  <style>
    /* Paste Critical CSS di sini. Contoh: */
    body { font-family: sans-serif; background-color: #f0f0f0; margin: 0; }
    .header { padding: 1rem; background: #333; color: white; }
    /* ...dan style penting lainnya untuk above-the-fold... */
  </style>


  <!-- 2. Preconnect ke Google Fonts -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>


  <!-- 3. Defer sisa CSS (non-critical) -->
  <link rel="preload" href={googleFontUrl} as="style" onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href={googleFontUrl}></noscript>


  <link rel="preload" href={globalCssUrl} as="style" onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href={globalCssUrl}></noscript>

</head>

Kode const googleFontUrl harus berada di atas <head>, tepatnya diatas --- sehingga dikenali Astro sebagai kode global untuk BaseLayout yang dapat ditempatkan di dalam <head> atau <body>, meskipun best practice yang teruji adalah di dalam <head>.

Untuk pengalaman pengguna yang lebih baik, kita bisa menggunakan metode Critical CSS untuk menampilkan warna tertentu ketika halaman dimuat sehingga tidak tampil halaman kosong selama layout diisi.

Jadi kita bisa menggunakannya dengan kode lengkap seperti ini:

Baca juga: Membuat formulir registrasi calon Kepala desa (Kades) menggunakan Multi-Step Formidable Forms
javascript
---
// src/layouts/BaseLayout.astro
import globalCssUrl from '../styles/global.css?url';
const googleFontUrl = "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";
---
<head>
  <meta charset="UTF-8">
  <title>My Website</title>

  <!-- 1. Inline Critical CSS -->
  <style>
    /* Paste Critical CSS di sini. Contoh: */
    body { font-family: sans-serif; background-color: #f0f0f0; margin: 0; }
    .header { padding: 1rem; background: #333; color: white; }
    /* ...dan style penting lainnya untuk above-the-fold... */
  </style>

  <!-- 2. Preconnect ke Google Fonts -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

  <!-- 3. Defer sisa CSS (non-critical) -->
  <link rel="preload" href={googleFontUrl} as="style" onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href={googleFontUrl}></noscript>

  <link rel="preload" href={globalCssUrl} as="style" onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href={globalCssUrl}></noscript>

</head>
<body>
  <slot />
</body>

Kesimpulan

Blocking CSS dapat diselesaikan dengan metode defer, sehingga situs Astro kita dapat memenuhi standar CWV (Core Web Vital), atau memberikan pengalaman pengguna yang lebih baik meskipun skor CWV tidak mencapai 100, terutama di mobile (misal dengan menambahkan skrip AdSense, micro-moment seperti RotatingQuote dan RotatingGlossary yang ada di situs ini).

Memuat kontributor…

Dan para kontributor lainnya yang mendukung MauCariApa.com.

Dukung Kami
Telkomsel Orbit logo

Telkomsel Orbit

Penyedia layanan internet rumah yang menggunakan perangkat modem WiFi tanpa langganan

Diskusi & Komentar

Panduan Komentar
  • • Gunakan bahasa yang sopan dan konstruktif
  • • Hindari spam, promosi, atau link yang tidak relevan
  • • Komentar akan terus dipantau secara berkala

Tentang Penulis

MauCariApa.com

MauCariApa.com

MauCariApa.com hadir sebagai wadah bagi para pencinta teknologi untuk saling belajar dan berkembang

Lanjut Membaca