Nó được thực thi ở đâu khi trình duyệt hiển thị HTML?
Người dùng yêu thích pixel (khung hình) được phân phối trên màn hình nhanh nhất có thể; Show
HTML và CSS là các khối xây dựng cơ bản mà các nhà phát triển web sử dụng để xây dựng trải nghiệm trực quan trên web. Nhưng làm thế nào để trình duyệt chuyển đổi HTML và CSS thành pixel? Quá trình chuyển đổi được sắp xếp của trình duyệt HTML và CSS thành pixel khá mờ và kết quả là hầu hết các nhà phát triển web không xem xét cách thức hoặc thời điểm nó chạy Hiểu quy trình này là chìa khóa để xây dựng các ứng dụng web hiệu suất cao và trong mẹo này, tôi sẽ giúp làm sáng tỏ nó Quy trình tổng thểHành trình từ văn bản HTML và CSS thô cho đến pixel trên màn hình trực quan có nhiều bước và trạng thái trung gian trên đường đi. Đối với mẹo thân thiện với người mới bắt đầu này, chúng ta sẽ thảo luận những điều sau đây Phân tích cú pháp HTMLKhi người dùng điều hướng đến một trang web, mục nhập vào ứng dụng là tài liệu HTML được cung cấp cho người dùng dưới dạng tệp văn bản Trình duyệt sử dụng Trình phân tích cú pháp HTML của nó để chuyển đổi văn bản HTML này thành Mô hình đối tượng tài liệu hoặc DOM DOM là một cây xác định cấu trúc của tài liệu. Mỗi nút trong cây DOM là một đối tượng trình duyệt ánh xạ trở lại các mục được chỉ định trong tệp văn bản HTML Ví dụ: xem xét văn bản HTML sau
Khi trình phân tích cú pháp HTML hoàn thành công việc của nó, cây DOM sau sẽ được tạo Phân tích cú pháp HTML vào DOM diễn ra dưới dạng Tác vụ trên Chủ đề chính. Nó được trình bày trực quan trong một dấu vết như thế này Mô hình đối tượng CSSMặc dù HTML xác định cấu trúc của tài liệu, nhưng nó cũng có thể tham chiếu CSS Stylesheets để xác định cách trình bày trực quan của tài liệu Các biểu định kiểu này thường được xác định thông qua thẻ Thời gian để trình duyệt hiển thị nội dung có ý nghĩa là một trong những khía cạnh quan trọng nhất của trải nghiệm người dùng. Để vẽ nội dung ban đầu, trình duyệt chuyển đổi HTML, CSS và JavaScript thành pixel, một quá trình được gọi là đường dẫn hiển thị quan trọng. Đường dẫn hiển thị quan trọng có bốn bước (MDN cộng tác viên 2022a)
phân tích cú phápTrình duyệt bắt đầu bằng cách yêu cầu một tệp HTML có tại một URL. Trong khi tải xuống tệp, trình duyệt sẽ chuyển đổi byte thành ký tự dựa trên mã hóa của tệp. Tùy thuộc vào kích thước của tệp, băng thông mạng và độ trễ của mạng, trình duyệt có thể thực hiện dần dần các bước của đường dẫn kết xuất trong khi tải xuống phần còn lại của tệp HTML trên một chuỗi riêng biệt (Hiwarale 2019) DOMVới HTML được tải xuống, công việc hiển thị trang web bắt đầu. Mô hình đối tượng tài liệu (DOM) biểu thị cấu trúc của trang web và cung cấp API cho các ngôn ngữ lập trình, chẳng hạn như JavaScript (MDN cộng tác viên 2022e). Nó bao gồm một tập hợp các đối tượng JavaScript được sắp xếp theo cấu trúc cây; . Khi phân tích cú pháp HTML, trình duyệt sẽ tạo một đối tượng JavaScript bất cứ khi nào nó gặp mã thông báo HTML, như Khi trình duyệt gặp thẻ 0 hoặc 1 tham chiếu đến tệp bên ngoài, trình duyệt sẽ tải xuống tệp trên một chuỗi riêng biệt (Hiwarale 2019). Phân tích cú pháp trên luồng chính tiếp tục không bị gián đoạnCSSOMKhi trình duyệt gặp CSS, trực tiếp trên thẻ HTML, giữa các thẻ 2 hoặc khi tải xuống từ tệp bên ngoài thông qua thẻ link , trình duyệt sẽ bắt đầu xây dựng mô hình đối tượng biểu định kiểu theo tầng (CSSOM). CSSOM là một cấu trúc cây chứa các nút HTML có khả năng xuất hiện trên màn hình (Hiwarale 2019). Điều này có nghĩa là các thẻ như link , html 2 và html 3 không tồn tại trong CSSOMMỗi nút CSSOM chứa tất cả các thuộc tính CSS áp dụng cho nút. Nếu CSS của chúng tôi không trực tiếp đặt thuộc tính (hoặc gián tiếp, khi được kế thừa từ nút cha), thì thuộc tính đó sẽ nhận giá trị mặc định từ biểu định kiểu tác nhân người dùng của trình duyệt Trong một khối CSS, các quy tắc xuất hiện sau có thể ghi đè các quy tắc được xác định ở đầu. Do đó, trình duyệt sẽ phân tích đầy đủ tệp CSS bên ngoài ngay cả khi mạng chậm (Hiwarale 2019). Điều này khiến CSS hiển thị bị chặn vì trình duyệt không thể xác định kiểu nào sẽ hiển thị cho đến khi trình duyệt phân tích hoàn toàn tệp CSS Tương tự như vậy, trình duyệt đợi để thực thi tệp tập lệnh cho đến khi nó tải xuống và phân tích cú pháp tất cả CSS đã gặp trước đó (Hiwarale 2019). Điều này ngăn JavaScript truy cập các giá trị kiểu có thể trở nên cũ nếu bị thay đổi bởi quy tắc CSS sau này trong biểu định kiểu. Kết quả cuối cùng là CSS có thể chặn thực thi tập lệnh, đặc biệt trong trường hợp tập lệnh nội tuyến hoặc không đồng bộ Một chiến lược để ngăn CSS chặn hiển thị hoặc tạo tập lệnh là đặt thuộc tính phương tiện trên biểu định kiểu bên ngoài. Ví dụ: mã bên dưới cho biết biểu định kiểu này chỉ áp dụng cho các khung nhìn có chiều rộng ít nhất là 1.080 pixel. Trình duyệt sẽ không tải biểu định kiểu này trên màn hình nhỏ, khiến trình duyệt không chặn hiển thị hoặc tạo tập lệnh khi CSS không áp dụng cho kích thước màn hình hiện tại
JavaScriptKhi trình duyệt gặp thẻ Việc thêm thuộc tính
Khi trình duyệt bắt đầu phân tích cú pháp một tập lệnh, nó sẽ phân tích cú pháp JavaScript cấp cao nhất thành một cây cú pháp trừu tượng (AST) và thêm nó vào ngữ cảnh thực thi chung (Saini 2020). Trong quá trình phân tích cú pháp, trình duyệt phân bổ bộ nhớ cho các biến, cho mỗi giá trị là Tiếp theo, trình duyệt diễn giải/thực thi mã, biên dịch AST thành mã byte (Hinkelmann 2017). Trong giai đoạn này, trình duyệt phân tích cú pháp đệ quy JavaScript bên trong các hàm được gọi. Trình duyệt tạo bối cảnh thực thi mới trong mỗi lần gọi hàm, giống như khi tạo bối cảnh thực thi toàn cầu (Saini 2020). Trình duyệt thêm từng bối cảnh thực thi mới vào ngăn xếp cuộc gọi của nó. Khi trình duyệt thực thi một câu lệnh trả về hoặc đến cuối ngữ cảnh thực thi, nó sẽ bật ngữ cảnh thực thi đó ra khỏi ngăn xếp cuộc gọi. Trình duyệt tiếp tục quá trình này cho đến khi ngăn xếp cuộc gọi trống, nghĩa là nó đã trở lại ngữ cảnh thực thi toàn cầu Nếu trình duyệt lặp đi lặp lại cùng một chức năng, nó sẽ biên dịch chức năng đó thành mã máy được tối ưu hóa bằng cách sử dụng thông tin loại được suy ra từ các lần gọi trước đó (Hinkelmann 2017). Miễn là các tham số của hàm duy trì cùng loại, mã được tối ưu hóa này sẽ thực thi nhanh hơn trong các lần gọi trong tương lai. Nếu các loại tham số thay đổi trong lần gọi tiếp theo, trình duyệt sẽ hủy tối ưu hóa chức năng trở lại mã byte (Hinkelmann 2017) phân tích cú pháp suy đoánKhi trình duyệt đợi một tệp tải xuống trên luồng chính, nó sẽ thực hiện phân tích cú pháp suy đoán trên một luồng riêng biệt, tìm kiếm các tài nguyên bên ngoài sau trong tài liệu (Hiwarale 2019). Trong luồng riêng biệt, trình duyệt tải xuống các tài nguyên để chúng sẽ có sẵn sau này cho trình phân tích cú pháp trên luồng chính. Tài nguyên được phân tích cú pháp suy đoán có thể không được sử dụng nếu tập lệnh vô hiệu hóa nó bằng cách xóa hoặc ẩn phần tử tham chiếu đến tài nguyên bên ngoài sự kiện DOMKhi trình duyệt hoàn tất việc tạo DOM và CSSOM, đồng thời thực thi tất cả các tập lệnh chặn trình phân tích cú pháp, trình duyệt sẽ kích hoạt sự kiện kết xuất câySau khi trình duyệt hoàn thành việc xây dựng DOM và CSSOM, trình duyệt sẽ kết hợp chúng để tạo cây kết xuất (MDN cộng tác viên 2022a). Trình duyệt duyệt qua mọi nút của DOM và sử dụng CSSOM, xác định quy tắc CSS nào sẽ gắn vào mỗi nút. Cây kết xuất chỉ chứa các nút chiếm dung lượng trên trang, vì vậy trình duyệt không bao gồm các nút DOM có Lưu ý rằng DOM và CSSOM có thể trải qua các thay đổi khác nếu các yêu cầu đối với CSS hoặc JavaScript bên ngoài vẫn đang chờ xử lý, kích hoạt các bản cập nhật tiếp theo cho cây kết xuất trong quá trình tải trang ban đầu. JavaScript có thể thay đổi một trong hai cây sau khi tải trang bằng cách thêm, xóa hoặc sửa đổi các nút DOM để đáp ứng với trình xử lý sự kiện Cách trình bàySau khi xây dựng cây kết xuất, trình duyệt chuyển sang bước bố cục. Trong quá trình bố trí, trình duyệt xác định cách định vị các nút trên trang. Điều này bao gồm việc tính toán chiều rộng và chiều cao của từng nút cũng như vị trí của nó so với các nút khác (Cộng tác viên MDN 2022a). Các nút trong cây kết xuất thường chồng lên nhau, vì vậy trình duyệt sẽ tạo các lớp để vẽ các nút theo thứ tự xếp chồng chính xác (Hiwarale 2019) Chiều rộng và chiều cao khả dụng cho bố cục phụ thuộc vào thẻ ________ 60 ________ 61; Vì bố cục xảy ra ở cuối đường dẫn hiển thị nên có nhiều sự kiện khiến trình duyệt phải tính toán lại bố cục. Bao gồm các
SơnVới bố cục đã được tính toán, trình duyệt đã sẵn sàng tô điểm ảnh lên màn hình. Trình duyệt vẽ từng lớp riêng biệt, bắt đầu từ lớp dưới cùng và tiến lên lớp trên cùng (Hiwarale 2019). Khi vẽ từng lớp, trình duyệt sẽ lấp đầy các pixel riêng lẻ dựa trên các thuộc tính hiển thị của từng lớp, một quá trình được gọi là rasterization (Hiwarale 2019). Đầu ra của thao tác này là một tập hợp các hình ảnh bitmap (Hiwarale 2019). Trình duyệt gửi các bitmap này tới GPU để vẽ chúng trên màn hình Sau khi sơn trang ban đầu, trình duyệt sẽ cố gắng tối ưu hóa các bản cập nhật trong các lần sơn sau. Để cập nhật màn hình, trình duyệt sẽ tính toán sự khác biệt so với những gì nó đã vẽ và chỉ vẽ lại phần đã thay đổi (Hiwarale 2019). Để đánh dấu các khu vực của trang mà trình duyệt đang vẽ, hãy bật Kết xuất > Vẽ nhấp nháy trong Chrome DevTools Phần kết luậnĐể hiển thị nội dung của trang web, trình duyệt sẽ thực hiện các bước phân tích cú pháp, xây dựng cây hiển thị, thực hiện bố cục và vẽ. Bằng cách biết trình duyệt thực hiện công việc gì trong từng bước, chúng tôi có thể phát triển các chiến lược để tối ưu hóa đường dẫn hiển thị quan trọng nguồnHinkelmann, F. (2017, ngày 16 tháng 5). Franziska Hinkelmann. Công cụ JavaScript - làm thế nào để họ thậm chí?. JSConf EU [Video]. YouTube. https. //www. youtube. com/watch?v=p-iiEDtpy6I Hiwarale, U. (2019, ngày 2 tháng 8). Trình duyệt hiển thị trang web như thế nào? . jspoint. https. //Trung bình. com/jspoint/how-the-browser-renders-a-web-page-dom-cssom-and-rendering-df10531c9969 Holtta, M. (2017, ngày 18 tháng 5). Marja Höltta. Phân tích cú pháp JavaScript - lười hơn là háo hức?. JSConf EU 2017 [Video]. YouTube. https. //www. youtube. com/watch?v=Fg7niTmNNLg Ailen, P. (2020, ngày 22 tháng 4). Điều gì buộc bố cục / chỉnh lại dòng. https. //ý chính. github. com/paulirish/5d52fb081b3570c81e3a cộng tác viên MDN. (2022a, ngày 5 tháng 6). Đường dẫn hiển thị quan trọng. https. // nhà phát triển. mozilla. org/en-US/docs/Web/Performance/Critical_rendering_path cộng tác viên MDN. (2022b, ngày 5 tháng 6). . Yếu tố kịch bản. https. // nhà phát triển. mozilla. org/en-US/docs/Web/HTML/Element/script cộng tác viên MDN. (2022c, ngày 3 tháng 6). Cửa sổ. Sự kiện DOMContentLoad. https. // nhà phát triển. mozilla. org/en-US/docs/Web/API/Window/DOMContentLoaded_event cộng tác viên MDN. (2022d, ngày 3 tháng 6). Cửa sổ. tải sự kiện. https. // nhà phát triển. mozilla. org/en-US/docs/Web/API/Window/load_event cộng tác viên MDN. (2022e, ngày 3 tháng 6). Mô hình đối tượng tài liệu (DOM). https. // nhà phát triển. mozilla. org/en-US/docs/Web/API/Document_Object_Model Saini, A. (2020, ngày 20 tháng 10). Mã JavaScript được thực thi như thế nào? . Namaste JavaScript Ep. 2 [Video]. YouTube. https. //www. youtube. com/watch?v=iLWTnMzWtj4 Mã HTML được hiển thị ở đâu?Một trang HTML cơ bản được hiển thị. Một văn bản và hình ảnh đơn giản được hiển thị trên màn hình . Từ các giải thích trước, trình duyệt đọc các byte thô của tệp HTML từ đĩa (hoặc mạng) và chuyển đổi thành các ký tự. Các ký tự được tiếp tục phân tích cú pháp thành mã thông báo.
Trang HTML được hiển thị như thế nào trong trình duyệt?Các bước kết xuất bao gồm kiểu, bố cục, màu vẽ và trong một số trường hợp là kết hợp . Các cây CSSOM và DOM được tạo trong bước phân tích cú pháp được kết hợp thành một cây kết xuất, cây này sau đó được sử dụng để tính toán bố cục của mọi thành phần hiển thị, sau đó được vẽ lên màn hình.
Nội dung đã tạo được hiển thị trong trình duyệt như thế nào?Kết xuất phía máy khách tạo các trang web trong trình duyệt, hoàn toàn dựa vào Mã JavaScript của bạn. Trình duyệt xử lý đầy đủ mã JS của bạn trước khi nội dung trang web của bạn hiển thị với người dùng. Mã JavaScript của bạn giúp xác định động cấu trúc của trang web ngay khi được tải xuống.
Công cụ kết xuất của trình duyệt hoạt động như thế nào?Như tên gợi ý, thành phần này chịu trách nhiệm hiển thị một trang web cụ thể do người dùng yêu cầu trên màn hình của họ . Nó diễn giải các tài liệu HTML và XML cùng với các hình ảnh được tạo kiểu hoặc định dạng bằng CSS và bố cục cuối cùng được tạo, được hiển thị trên giao diện người dùng. |