Thuộc tính defer trên <script src="..."> (chỉ script ngoài) yêu cầu trình duyệt: tải song song, nhưng thực thi sau khi HTML phân tích xong, trước sự kiện DOMContentLoaded, và theo thứ tự khai báo.
So sánh async vs defer
| Thuộc tính | Tải | Thực thi | Thứ tự |
|---|---|---|---|
| Không có | Chặn HTML | Ngay lập tức | Theo thứ tự |
| async | Song song | Ngay khi tải xong | Không đảm bảo |
| defer | Song song | Sau khi HTML parse xong | Đảm bảo thứ tự |
Ví dụ
Tệp new.js:
function sayHello() { alert("Hello World"); }
HTML:
<html>
<head>
<script src="new.js" defer></script>
</head>
<body>
<p>Đây là văn bản demo.</p>
</body>
</html>
Khuyến nghị
- Dùng
defercho script cần DOM đã sẵn sàng (thư viện UI, init app). - Đặt trong
<head>để tải sớm nhất. - Script inline (không src) không hỗ trợ defer.