0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Tại sao JavaScript làm chặn việc phân tích HTML?

Đăng vào 7 tháng trước

• 3 phút đọc

Tại sao JavaScript làm chặn việc phân tích HTML?

Giới thiệu

Khi xây dựng một trang web, trình duyệt sẽ thực hiện một chuỗi các bước để hiển thị nội dung. Một trong những khía cạnh quan trọng trong quá trình này là việc xử lý HTML và JavaScript. Bài viết này sẽ giúp bạn hiểu rõ hơn về cách JavaScript có thể làm chậm quá trình phân tích HTML và cách tối ưu hóa để cải thiện hiệu suất trang web của bạn.

Cách trình duyệt xây dựng một trang web

Trình duyệt sẽ thực hiện các bước sau để xây dựng một trang web:

  1. Đọc tệp HTML từ trên xuống dưới.
  2. Chuyển đổi văn bản thành token và sau đó thành cây DOM.

Chặn phân tích HTML

Khi trình duyệt gặp một thẻ <script> mà không có thuộc tính async hoặc defer, nó sẽ:

  • Tạm dừng việc phân tích HTML ngay lập tức.
  • Tải xuống tệp JavaScript (nếu là tệp bên ngoài).
  • Thực thi JavaScript đó. Chỉ sau khi việc thực thi đã hoàn tất, trình duyệt mới tiếp tục xây dựng DOM.

Tại sao việc phân tích dừng lại?

Việc dừng phân tích là cần thiết vì JavaScript có khả năng thay đổi DOM hoặc CSSOM trong khi trang đang tải.

Ví dụ:

html Copy
<p id="greet">Hello</p>
<script>
  document.getElementById("greet").innerText = "Hi từ JS!";
</script>

Nếu trình duyệt tiếp tục phân tích, nó có thể lãng phí công sức để xây dựng các node mà JavaScript sẽ xóa hoặc thay đổi. Do đó, trình duyệt sẽ chờ để đảm bảo tính chính xác.

Ví dụ về bảng thời gian

Trường hợp 1: Tệp script chặn phân tích

html Copy
<html>
  <head>
    <script src="big-script.js"></script> <!-- chặn phân tích -->
  </head>
  <body>
    <h1>Hello</h1>
  </body>
</html>
  1. Trình duyệt bắt đầu phân tích <head>.
  2. Đến <script> → dừng mọi thứ lại.
  3. Tải xuống và chạy big-script.js.
  4. Sau khi thực thi → tiếp tục phân tích <body>.
    Kết quả: <h1> xuất hiện muộn hơn, làm chậm việc hiển thị.

Trường hợp 2: Tệp script với defer

html Copy
<html>
  <head>
    <script src="big-script.js" defer></script>
  </head>
  <body>
    <h1>Hello</h1>
  </body>
</html>
  1. Trình duyệt giữ nguyên việc phân tích DOM mà không dừng lại.
  2. big-script.js tải xuống ở chế độ nền.
  3. Chỉ thực thi sau khi DOM đã hoàn toàn được phân tích.
    Trang xuất hiện nhanh hơn, không bị chặn.

Tóm tắt

“JavaScript chặn việc phân tích” có nghĩa là trình duyệt sẽ ngừng xử lý HTML khi gặp một thẻ <script> bình thường cho đến khi mã script đó được thực thi hoàn toàn.

Thực hành tốt nhất

  • Sử dụng thuộc tính defer hoặc async cho các tệp JavaScript bên ngoài để cải thiện thời gian tải trang.
  • Đặt các thẻ <script> ở cuối tệp HTML để không làm chậm việc phân tích DOM.

Những cạm bẫy thường gặp

  • Quên thêm thuộc tính async hoặc defer cho các tệp JavaScript, dẫn đến việc trang tải chậm.
  • Tải quá nhiều tệp JavaScript đồng thời, gây ra độ trễ trong việc hiển thị.

Mẹo hiệu suất

  • Giảm kích thước tệp JavaScript bằng cách loại bỏ mã không cần thiết và sử dụng kỹ thuật nén.
  • Sử dụng các công cụ phân tích hiệu suất để theo dõi và tối ưu hóa thời gian tải.

Xử lý sự cố

  • Nếu trang web của bạn tải chậm, hãy kiểm tra các tệp JavaScript và đảm bảo chúng không chặn việc phân tích HTML.
  • Sử dụng DevTools trong trình duyệt để phân tích thời gian tải và tìm ra các vấn đề tiềm ẩn.

Câu hỏi thường gặp

1. Tại sao cần sử dụng asyncdefer?

  • Để cải thiện tốc độ tải của trang và giảm độ trễ khi hiển thị nội dung.

2. Làm thế nào để kiểm tra các vấn đề hiệu suất trong trang web của tôi?

  • Sử dụng các công cụ như Google PageSpeed Insights hoặc Lighthouse để phân tích và đưa ra gợi ý tối ưu hóa.

Kết luận

Việc hiểu rõ cách JavaScript ảnh hưởng đến quá trình phân tích HTML là rất quan trọng cho việc tối ưu hóa hiệu suất trang web. Bằng cách thực hiện những thực hành tốt nhất và tránh những cạm bẫy thường gặp, bạn có thể cải thiện trải nghiệm người dùng và tốc độ tải trang của mình. Hãy bắt đầu tối ưu hóa trang web của bạn ngay hôm nay!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào