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.