Servo 0.7.0: 527 commit với nhiều tính năng web mới

Công nghệ05 tháng 11, 2026·5 phút đọc

Bản phát hành Servo 0.7.0 gồm toàn bộ thay đổi trong tháng 9 với 527 commit, bổ sung hàng loạt tính năng nền tảng web như thuộc tính user-select, hàm alpha() CSS, roundRect() trên Canvas và thuật toán WebCrypto mới. Bản cập nhật cũng cải thiện WebGL2, trình soạn thảo WYSIWYG, phụ đề video và tối ưu hiệu năng, bộ nhớ.

Servo 0.7.0: 527 commit với nhiều tính năng web mới

Servo vừa phát hành phiên bản 0.7.0, gói gọn toàn bộ thay đổi mà nhóm phát triển đưa vào trong tháng 9 với tổng cộng 527 commit. Đây là một trong những đợt cập nhật dày đặc nhất của engine trình duyệt mã nguồn mở này, tập trung vào độ tương thích nền tảng web, hiệu năng và độ ổn định.

Banner tổng quan bản phát hành Servo tháng 9Banner tổng quan bản phát hành Servo tháng 9

Nhiều tính năng nền tảng web được đưa vào

Bản phát hành bổ sung một loạt tính năng CSS và DOM mà các trang web hiện đại thường dùng:

  • Lớp giả :checked và thuộc tính user-select
  • Tính toán có kiểu (typed arithmetic) trong CSS, hàm alpha() và thuộc tính font-width
  • parentRule trên CSSRule và CSSStyleDeclaration, version trên HTMLHtmlElement
  • getComposedRanges() và direction trên Selection
  • baseURL trên CSSStyleSheet, cùng CSS module và text module
  • getContextAttributes() trên CanvasRenderingContext2D và OffscreenCanvasRenderingContext2D
  • Header Content-Language, thuộc tính dir trên Document
  • Hàng loạt đối tượng SVG: SVGAElement, SVGPatternElement, SVGTSpanElement, SVGTextContentElement, SVGTextElement, SVGTextPositioningElement
  • Thuật toán MLKEM768-X25519 cho WebCrypto
  • Hàm roundRect() trên CanvasRenderingContext2D — dùng để vẽ hình chữ nhật bo góc
  • paintTime và presentationTime trên PerformancePaintTiming
  • getCueAsHTML() trên VTTCue

Bảng điều khiển (console) của công cụ phát triển giờ đây đánh giá cú pháp JavaScript ngay khi nhập, giúp phản hồi nhanh hơn.

Về bảo mật, Servo đã nâng cấp lên SpiderMonkey v153.3 (engine JavaScript) và mozangle v0.7, cả hai đều chứa bản vá cho các lỗi bảo mật được báo từ phía upstream.

Tương thích thực tế và các tính năng đang hoàn thiện

Về khả năng chạy các trang web thực tế, demo egui.rs giờ hoạt động đúng như mong đợi khi bật tùy chọn --pref dom._webegpu_enabled. Trò chơi Candy Crush cũng đã chơi được trên Servo.

Demo Candy Crush chạy trên ServoDemo Candy Crush chạy trên Servo

Một số hạng mục đang trong quá trình phát triển:

  • Cây trợ năng (accessibility tree) với --pref accessibility_enabled giờ báo cáo được kích thước hình học của phần tử inline, giảm khối lượng xử lý khi DOM thay đổi, và đánh dấu các phần tử display: none là ẩn.
  • WebGL2 (--pref dom_webgl2_enabled) có nhiều cải thiện về độ tuân thủ tiêu chuẩn.
  • Trình soạn thảo WYSIWYG dựa trên contenteditable tiến triển tốt: sự kiện bàn phím đã được nối khi bật --pref dom_exec_command_enabled.
  • Phụ đề video dần hoàn thiện: text track phát sự kiện enter, exit, cuechange; danh sách text track trả về đầy đủ và đã sắp xếp; URL text track được tải đúng thời điểm; bộ phân tích WebVTT có thể phục hồi sau lỗi.
  • Sanitizer API chấp nhận thuộc tính javascriptURLs; IndexedDB bổ sung openCursor(), openKeyCursor(), advance(), continue() và continuePrimaryKey().
  • Animation API có thêm phương thức getTimeline() và setTimeline().

Giao diện demo egui.rs trên ServoGiao diện demo egui.rs trên Servo

Thay đổi với nhà phát triển nhúng (embedding API)

Các thay đổi API có thể ảnh hưởng tới dự án tích hợp Servo:

  • Thêm API Servo::forward_accessibility_action cho sự kiện phát sinh từ công cụ trợ năng, và WebView::clear_session_history để xóa lịch sử phiên.
  • API WebView::set_throttled bị loại bỏ: việc tiết chế (throttling) tự động diễn ra khi WebView bị ẩn và dừng khi hiện lại.
  • Phương thức WebViewDelegate::notify_focus_changed cùng các hàm focus và blur bị loại bỏ; thay vào đó nhà nhúng phải gọi WebView::set_focused mỗi khi WebView nhận hoặc mất focus hệ thống.
  • Tính năng WebGL được đưa vào default_web_features; dự án không muốn hỗ trợ WebGL sẽ phải tắt các tính năng mặc định.
  • Chế độ đa tiến trình được bật lúc biên dịch bằng Cargo feature mới tên multprocess; tắt nó có thể giảm khoảng 2MB kích thước file thực thi.
  • Hai tùy chọn mới js_mem_gc_malloc_threshold_base_mb và js_mem_gc_urgent_threshold_mb cho phép tinh chỉnh hành vi bộ thu gom rác (GC), hữu ích trên thiết bị hạn chế bộ nhớ.
  • Mức tương thích JVM trên Android được nâng lên 11, SDK OpenHarmony cập nhật lên API level 23 và có thể cross-compile bản OpenHarmony từ máy Windows.

Với người dùng cuối, tổ hợp Ctrl+A (hoặc Command+A trên macOS) giờ chọn toàn bộ nội dung trang. Không thể sao chép văn bản trong ô nhập mật khẩu. Các promise bị từ chối mà không được xử lý sẽ được báo ra console JavaScript, giúp khoanh vùng lỗi tương thích dễ hơn.

Hiệu năng và độ ổn định

Nhóm phát triển đã giảm cấp phát bộ nhớ không cần thiết, cấp phát trước cho vector, tránh IPC ở chế độ đơn tiến trình, giảm tương tác với GC và giảm khối lượng xử lý khi thay đổi vùng chọn, gửi sự kiện, tính số đo font hay lập chỉ mục khung cửa sổ. Mức dùng bộ nhớ cũng được cắt giảm nhờ tái sử dụng và chia sẻ buffer, dọn dẹp dữ liệu riêng của trang và nén cấu trúc dữ liệu. Một rò rỉ bộ nhớ liên quan tới phần tử ảnh và một footgun có thể gây chu trình GC không thể thu hồi cũng đã được xử lý. Trên Linux, Servo bật thread affinity boosting, có thể cải thiện hiệu năng trên một số kiến trúc CPU.

Nhiều lỗi treo (panic) và treo tiến trình đã được sửa, gồm cả lỗi treo ở trang about:memory, WebRTC, SharedWorker, và tình huống trang about:crash — vốn dùng để cảnh báo khi trang thường gặp panic — lại tự gây panic.

Góc nhìn

Với các nhà phát triển web, danh sách tính năng trong Servo 0.7.0 đáng chú ý ở chỗ nó không chỉ là những API ngách. user-select, roundRect(), :checked, tính toán CSS có kiểu hay alpha() đều là những thứ gặp hàng ngày trên các trang thực tế, nên việc một engine thay thế dần phủ được chúng cho thấy khả năng chạy web hiện đại đang được thu hẹp khoảng cách.

Với đội ngũ kỹ thuật đang cân nhắc nhúng Servo vào ứng dụng, phần embedding API là chỗ cần đọc kỹ: các thay đổi như bỏ set_throttled, thay focus/blur bằng set_focused hay chuyển WebGL vào bộ tính năng mặc định đều có thể làm hỏng bản build hiện tại. Việc chế độ đa tiến trình giờ là một Cargo feature chọn lúc biên dịch cũng tạo thêm lựa chọn đánh đổi giữa kích thước file thực thi và lớp cách ly tiến trình.

Nguồn: servo.org · Quy trình biên tập

Chia sẻ:FacebookX