Asynchronous Loading JavaScript: Cara Kerja & Contoh Kode

Asynchronous loading JavaScript adalah teknik memuat file skrip secara paralel bersamaan dengan proses penguraian (parsing) dokumen HTML, sehingga proses render halaman web tidak terhenti atau terblokir oleh unduhan skrip yang berukuran besar. Berbeda dengan pemuatan sinkron (synchronous) default yang menghentikan pembentukan DOM hingga skrip selesai diunduh dan dieksekusi, pemuatan asinkron memaksimalkan kecepatan muat halaman dan memperbaiki metrik Core Web Vitals seperti Largest Contentful Paint (LCP) serta First Input Delay (FID).

Secara teknis, terdapat dua atribut utama pada tag HTML <script> untuk mengatur perilaku ini, yaitu async dan defer. Pemilihan atribut yang tepat bergantung pada ketergantungan antar-skrip dan posisinya di dalam dokumen HTML agar tidak memicu error eksekusi.

Perbandingan Metode Pemuatan Skrip JavaScript

Untuk memahami perbedaan mendalam antara pemuatan standar, async, dan defer, perhatikan tabel matriks komparasi di bawah ini:

Metode Pengunduhan (Downloading) Eksekusi (Execution) Blokir Parser HTML Kasus Penggunaan Ideal
Standard (Default) Berhenti sejenak (Blocking) Segera setelah diunduh Ya Skrip kecil yang sangat krusial dan harus berjalan sebelum elemen lain dirender.
Async Asinkron (Di latar belakang) Segera setelah selesai diunduh (menghentikan parser sementara) Ya (saat eksekusi) Skrip mandiri tanpa ketergantungan, seperti Google Analytics atau iklan banner.
Defer Asinkron (Di latar belakang) Setelah DOM selesai terurai (sebelum event DOMContentLoaded) Tidak Skrip utama aplikasi, framework, atau pustaka yang membutuhkan elemen DOM siap.

Implementasi Kode Asynchronous Loading

Penerapan atribut ini dilakukan langsung pada deklarasi tag <script> di dalam dokumen HTML. Berikut adalah contoh sintaks penerapan masing-masing atribut:

<!-- Menggunakan Atribut Async -->
<script src="analytics.js" async></script>

<!-- Menggunakan Atribut Defer -->
<script src="app.js" defer></script>

Langkah-Langkah Teknis Optimasi Skrip

  1. Audit Ketergantungan Skrip: Identifikasi file JavaScript mana yang saling bergantung. Jangan pernah menggunakan async pada skrip yang membutuhkan pustaka lain (misalnya jQuery atau React) untuk berjalan lebih dulu.
  2. Terapkan Atribut Defer pada Skrip Internal: Untuk file bundel aplikasi utama, gunakan defer agar browser memproses seluruh elemen DOM terlebih dahulu tanpa risiko error "Cannot read property of null".
  3. Terapkan Atribut Async pada Skrip Pihak Ketiga: Tempatkan atribut async pada skrip eksternal yang berdiri sendiri, seperti pelacak analitik, widget media sosial, atau tag iklan, agar kegagalan atau keterlambatan server pihak ketiga tidak melumpuhkan situs utama.
  4. Uji Performa: Jalankan pengujian menggunakan Google Lighthouse atau WebPageTest untuk memastikan peningkatan skor pada metrik kecepatan muat.

Troubleshooting & Kesalahan Umum di Lapangan

Kesalahan paling sering terjadi adalah menggunakan atribut async pada skrip yang memanipulasi elemen DOM secara langsung saat skrip selesai diunduh secara acak. Jika skrip selesai diunduh sebelum elemen HTML tersebut terbaca oleh parser, eksekusi akan gagal. Selalu pastikan skrip yang menggunakan async bersifat independen. Jika urutan eksekusi mutlak diperlukan, gunakan defer karena browser menjamin eksekusi berurutan sesuai dengan urutan penulisannya di dalam kode HTML.