Javascript là ngôn ngữ lập trình phía khách hàng phổ biến và mạnh mẽ, được sử dụng để tạo ra các website động. Trong lập trình web, việc tối ưu hóa hiệu suất là vô cùng quan trọng. Do đó, việc hiểu và sử dụng đúng cách thuộc tính async
và defer
trong JavaScript sẽ giúp bạn cải thiện hiệu suất tải trang web một cách đáng kể.
Giới thiệu về thuộc tính Async và Defer
Thuộc tính Async
Thuộc tính async
cho phép trình duyệt tiếp tục tải HTML trong khi tải và thực thi tập lệnh JavaScript song song. Khi một thẻ <script>
có thuộc tính async
, tập lệnh đó sẽ được tải và thực thi ngay khi hoàn thành, không đợi đến khi toàn bộ tài liệu HTML đã được phân tích hoàn chỉnh.
<script src="example.js" async></script>
Thuộc tính Defer
Thuộc tính defer
cũng cho phép tải HTML song song với việc tải tập lệnh JavaScript, tuy nhiên, khác với async
, các tập lệnh có thuộc tính defer
sẽ chỉ được thực thi khi toàn bộ tài liệu HTML đã phân tích xong.
<script src="example.js" defer></script>
Khi nào cần sử dụng Async và Defer?
Trường hợp sử dụng Async
Sử dụng async
khi:
- JavaScript không phụ thuộc vào bất kỳ yếu tố nào trong DOM.
- Tập lệnh cần được thực thi ngay khi tải xong, không quan tâm tới việc tài liệu HTML đã hoàn thành hay chưa.
Ví dụ cơ bản:
<script src="tracking.js" async></script>
Trong trường hợp này, tracking.js
có thể là một đoạn mã theo dõi mà không cần tương tác với DOM ngay lập tức.
Trường hợp sử dụng Defer
Sử dụng defer
khi:
- JavaScript có tác động đến DOM và thực hiện các thao tác dựa trên DOM.
- Cần đảm bảo rằng mã JavaScript sẽ chỉ được thực thi sau khi toàn bộ tài liệu HTML đã được tải xong.
Ví dụ nâng cao:
<script src="main.js" defer></script>
Trong ví dụ này, main.js
có thể chứa các hàm thao tác DOM phức tạp, cần đợi tài liệu HTML hoàn thành trước khi thực thi.
Ví dụ từ cơ bản đến nâng cao
Ví dụ cơ bản với Async
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Async Example</title>
<script src="script1.js" async></script>
<script src="script2.js" async></script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Ví dụ nâng cao với Defer
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Defer Example</title>
<script src="script1.js" defer></script>
<script src="script2.js" defer></script>
</head>
<body>
<h1>Hello World!</h1>
<div id="container"></div>
<script>
document.getElementById('container').innerText = "DOM Manipulated!";
</script>
</body>
</html>
Kết luận
async
và defer
là hai thuộc tính quan trọng của thẻ <script>
trong JavaScript, giúp tối ưu hóa việc tải tập lệnh và hiệu suất của trang web. Hiểu rõ cách sử dụng và các trường hợp áp dụng của từng thuộc tính sẽ giúp bạn xây dựng các trang web với hiệu suất cao và trải nghiệm người dùng tốt hơn.