Attribute Async dan Defer
- Categories:
- html
- javascript
Tag HTML script memiliki attribute async
dan defer
yang berguna untuk mempercepat page load time. Attribute async
muncul di HTML 5 sedangkan defer
sudah cukup lama di-_support_ oleh browser termasuk Internet Explorer.
Script Tag
Ketika browser menemukan tag script
ketika sedang melakukan parsing HTML, maka browser akan berhenti melakukan proses parsing dan mengeksekusi javascript hingga selesai.
Keterangan:
- Hijau: Browser melakukan proses parsing
- Abu-abu: Browser berhenti melakukan proses parsing
- Kuning: Browser melakukan download javascript
- Merah: Browser melakukan eksekusi javascript
Script Tag Dengan Atribut Async
Dengan attribute async
, browser akan melakukan download script
secara paralel dengan proses parsing HTML. Browser kemudian akan melakukan berhenti parsing ketika melakukan eksekusi javascript yang telah di-_download_ tersebut. Alhasil browser akan lebih cepat melakukan proses rendering dibanding tanpa attribute async
.
Ada kemungkinan browser selesai download dan eksekusi sebelum atau sesudah event DOMContentLoaded
, namun bisa dipastikan selesai download dan eksekusi sebelum event load
. Sehingga jangan menggunakan event DOMContentLoaded
atau jQuery ready
didalam file javascript yang dipasang script async
karena kode javascript tersebut belum pasti dieksekusi.
Mengenai event DOMContentLoaded
dan load
dapat dilihat di tulisan sebelumnya yang berjudul HTML Event DOMContentLoaded dan Load.
Script Tag Dengan Atribut Defer
Dengan attribute defer
, browser akan melakukan download script
secara paralel dengan proses parsing HTML. Javascript yang telah di-_download_ tersebut dieksekusi tepat sebelum event DOMContentLoaded
terjadi. Attribute ini juga dapat membuat browser lebih cepat melakukan proses rendering.
Berbeda dengan async
, jika kode dipasang script defer
maka kode DOMContentLoaded
atau jQuery ready
bisa dipastikan akan tereksekusi.
Jika attribute async
dan defer
digunakan bersamaan, maka akan digunakan async
dan fallback ke defer
ketika browser tidak support async
.
Dukungan Peramban
Sebagian besar peramban atau browser telah memiliki dukungan terhadap async dan defer.
Kapan Pakai Async atau Defer
- Hanya gunakan
async
dan/ataudefer
untuk eksternal javascript. - Jika Javascript indenpenden dan tidak terkait kode javascript yang lain, gunakan
async
. - Jika ada javascript yang tergantung javascript lain, gunakan
defer
dan pastikan dieksekusi saat eventDOMContentLoaded
atau jQueryready
.
Artikel lainnya
- Script Tag - async & defer
- Async-loaded scripts with DOMContentLoaded or load event handlers not being called?
- HTML5’s async Script Attribute
- Running Your Code at the Right Time
- Tags:
- #html
- #javascript
Recent Posts
How to Defend Against Brute-Force and DoS Attacks with Fail2ban, Nginx limit_req, and iptables
In this tutorial, I’ll explain how to protect your public-facing Linux server and Nginx web server from common threats, including brute-force and DoS attacks.
Is Getting AWS Solutions Architect Associate Certification Worth It?
If you are a full-time Software Engineer, there's no strong need to pursue this certification.
DevSecOps
My Notes about DevSecOps
AWS Secrets Manager
Explanation about AWS Secrets Manager with example code.
Envelope Encryption
Envelope encryption is the practice of encrypting plaintext data with a data key, and then encrypting the data key under another key.