Phần “bên trong lõi trình duyệt” (đào sâu)
Đây là phần dành cho các lập trình viên đã biết trình duyệt là gì và muốn tìm hiểu kỹ bên trong cách nó hoạt động, kiến trúc của nó ra sao, và cách các engine (Chromium, WebKit, Gecko) khác nhau như thế nào. Chúng ta cũng sẽ đề cập đến mã nguồn, khái niệm và các thành phần bên trong.
Định nghĩa và Mục đích
Trình duyệt web là một ứng dụng phần mềm phía người dùng (client-side) có nhiệm vụ truy xuất, diễn giải và hiển thị nội dung web được cung cấp qua Internet. Nó chủ yếu sử dụng các giao thức HTTP/HTTPS để giao tiếp với máy chủ web và hiển thị nội dung HTML, CSS, JavaScript, hình ảnh và các tài nguyên khác lên màn hình.
Ở cấp độ cốt lõi, trình duyệt thực hiện các công việc sau:
- Gửi các yêu cầu mạng (GET, POST, v.v.)
- Phân tích cú pháp mã nguồn (HTML, XML, CSS, JavaScript)
- Xây dựng cây DOM và cây render
- Vẽ giao diện người dùng
- Xử lý đầu vào của người dùng và tính tương tác
Kiến trúc cốt lõi của trình duyệt
Hầu hết các trình duyệt hiện đại đều được cấu trúc bằng kiến trúc đa tiến trình hoặc đa luồng để tối ưu hóa hiệu suất và bảo mật. Giao diện người dùng (UI) bao gồm các thành phần như thanh địa chỉ, nút điều hướng, dấu trang và quản lý tab. Browser Engine đóng vai trò trung gian giữa UI và Rendering Engine, hướng dẫn Rendering Engine cách hoạt động và cập nhật.
Rendering Engine chịu trách nhiệm phân tích cú pháp HTML và CSS để xây dựng DOM và CSSOM, sau đó được hợp nhất thành một cây render. Cây này trải qua các tính toán bố cục và được vẽ lên màn hình, tiếp theo là quá trình tổng hợp. Mô-đun Networking xử lý các yêu cầu HTTP/HTTPS, bộ nhớ đệm, thiết lập proxy và quản lý cookie. JavaScript Engine (như V8 hoặc SpiderMonkey) phân tích cú pháp, biên dịch và thực thi JavaScript, quản lý các tác vụ bất đồng bộ bằng vòng lặp sự kiện và hàng đợi gọi lại.
Lưu trữ dữ liệu được quản lý thông qua các công nghệ như Web Storage (localStorage và sessionStorage), IndexedDB, API Cache và cookie truyền thống. Cuối cùng, trình duyệt chứa các Thành phần Bảo mật thiết yếu như cơ chế sandbox, thực thi Chính sách Cùng nguồn gốc, CORS (Chia sẻ Tài nguyên Liên nguồn) và Chính sách Bảo mật Nội dung (CSP).
Giao diện người dùng (UI)
- Thanh địa chỉ
- Nút quay lại / tiến / tải lại
- Thanh bookmark
- Quản lý tab
Bộ máy trình duyệt (Browser Engine)
- Là cầu nối giữa giao diện và bộ máy hiển thị
Nguồn: bởi Kishan Vikani trên Stack Overflow
- Điều khiển hành vi của bộ máy hiển thị (ví dụ: điều hướng, cập nhật)
Nguồn: bởi Kishan Vikani trên Stack Overflow
Bộ máy hiển thị (Rendering Engine)
DOM (Mô hình Đối tượng Tài liệu) biểu diễn cấu trúc HTML dưới dạng cây các phần tử, trong khi CSSOM (Mô hình Đối tượng CSS) nắm bắt các kiểu và quy tắc trong một cây tương tự. Kết hợp lại, các mô hình này tạo ra một cây hiển thị dùng để biểu diễn trực quan.
Trong quy trình Bố cục và Vẽ, vị trí và kích thước của từng nút được tính toán, được gọi là bố cục hoặc chỉnh sửa lại. Sau đó, trình duyệt sẽ vẽ các thành phần trực quan lên các lớp và cuối cùng thực hiện ghép nối để hợp nhất các lớp này để hiển thị.
Các engine phổ biến
Chromium / Blink (Chrome, Edge, Opera, Vivaldi, Brave,...)
Chromium là một nền tảng mã nguồn mở do Google phát triển. Blink, một nhánh của WebKit, là công cụ kết xuất của nó. Chromium sử dụng công cụ JavaScript V8 và có kiến trúc mô-đun hóa cao, hỗ trợ hộp cát và thiết kế đa quy trình. Vòng đời kết xuất bao gồm việc phân tích cú pháp JavaScript trong V8 và thực thi các mã như:
Kiến trúc của nó bao gồm một quy trình UI để quản lý tab và cửa sổ, một quy trình kết xuất cho mỗi tab và một quy trình GPU để xử lý việc tổng hợp.