Cập nhật Servo tháng này: duyệt web theo tab, cải thiện trên Windows và công cụ phát triển
(servo.org)- Bản cập nhật Servo tháng 8 năm 2024 bao quát nhiều nội dung, từ tính năng của web engine đến trình duyệt servoshell, chất lượng trên Windows, công cụ phát triển và độ ổn định của CI
- Bản dựng Nightly được bổ sung
HTMLDialogElement.show(), kết xuất nhập liệu của<textarea>,border-image,structuredClone(),crypto.randomUUID(), phát WAV, Web AudioIIRFilterNode, điều hướng cross-origin redirect và hơn thế nữa - Các thành phần cốt lõi đã được nâng lên SpiderMonkey 128, WebRender 0.65, wgpu 22.0 và Rust 1.80.1; WebXR và flexbox cũng được bật mặc định
- servoshell có thêm duyệt web theo tab, thanh công cụ mới và trang tab mới; trên Windows, khả năng điều hướng bằng bàn phím, xuất PNG và các vấn đề liên quan đến phông chữ·GPU cũng được cải thiện
- Với runner CI mới, thời gian dựng chỉ dành cho Windows đã giảm 70%; nhiều lỗi crash xảy ra trên website thực tế cùng các BorrowError liên quan đến GC của SpiderMonkey cũng đã được sửa
Bổ sung tính năng nền tảng web
- Nhiều Web API và tính năng CSS đã lần lượt được đưa vào bản dựng Servo nightly
- 2024-07-27: hỗ trợ mặc định
show()củaHTMLDialogElement - 2024-07-29: thuộc tính
typecủaHTMLFieldSetElement - 2024-07-31: kết xuất văn bản nhập trong
<textarea> - 2024-07-31: thuộc tính CSS
border-image - 2024-08-02: các nguồn CSP
unsafe-eval,wasm-unsafe-eval - 2024-08-04: phát tệp âm thanh WAV
- 2024-08-09: API
structuredClone() - 2024-08-12:
IIRFilterNodecủa Web Audio - 2024-08-13: điều hướng cross-origin redirect
- 2024-08-23: API
crypto.randomUUID() - 2024-08-29: thuộc tính CSS
clip-path- không bao gồm các giá trị
path(),polygon(),shape(),url()
- không bao gồm các giá trị
- 2024-07-27: hỗ trợ mặc định
Thay đổi trong các thành phần engine và hành vi mặc định
- Servo đã nâng các thành phần phụ thuộc chính lên phiên bản mới nhất
-
SpiderMonkey 128
-
WebRender 0.65
-
wgpu 22.0
- Rust 1.80.1
- WebXR và flexbox được bật mặc định
- Các Web API trả về Promise giờ sẽ reject Promise đúng cách khi thất bại thay vì ném exception
-
Cải thiện WebXR và flexbox
- WebXR API đã được chỉnh sửa nhiều giao diện và tính năng nhập liệu để phù hợp với việc bật mặc định
- Đã bổ sung hỗ trợ Gamepad
- Có các cập nhật liên quan đến hand input,
XRBoundedReferenceSpace,XRFrame,XRInputSource,XRPose,XRSession,XRTargetRayMode,XRView,XRWebGLLayer makeXRCompatible()giờ có thể được gọi không chỉ từWebGLRenderingContextmà còn từWebGL2RenderingContext
- flexbox được tăng cường các tính năng layout thường dùng
- thuộc tính
gap align-content: stretch- các giá trị
start,endcủaalign-items,align-self - hỗ trợ mặc định
flex-direction: column,column-reverse
- thuộc tính
- Việc tính toán vị trí và kích thước của flex item cũng chính xác hơn
- hỗ trợ
position: relativetrên flex item z-indexcủa flex item luôn tạo stacking context- intrinsic size chính xác được áp dụng cho flex item và flex container
- hỗ trợ
- Công việc hỗ trợ văn bản hai chiều vẫn đang được tiến hành
- bao gồm thay đổi kiến trúc fragment tree và công việc trên giao diện
writing-mode - thuộc tính
unicode-bidivàdirđược hỗ trợ một phần - giá trị
dir=autovẫn chưa được hỗ trợ
- bao gồm thay đổi kiến trúc fragment tree và công việc trên giao diện
Trình duyệt servoshell và chất lượng trên Windows
- Servo-the-browser đã có thanh công cụ mới và duyệt web theo tab
- Trang tab mới sử dụng API mới cho phép Servo embedder đăng ký custom protocol handler
- Chất lượng chạy trên Windows cũng được cải thiện ở nhiều mặt
- điều hướng bằng bàn phím đã được sửa
- hành vi xuất PNG của
--outputđã được sửa - các lỗi liên quan đến phông chữ và GPU đã được khắc phục
- Các bản sửa liên quan đến Windows gắn với những vấn đề như glyph bị căn sai và màu hiển thị sai trên servo.org và duckduckgo.com, cũng như ảnh bị vỡ trên wikipedia.org
Công cụ phát triển và quy trình làm việc cho nhà phát triển
- Hỗ trợ devtools đã được mở rộng thêm tính năng sau tháng cuối cùng của dự án thực tập
- Servo hỗ trợ HTML tree
- hỗ trợ các panel Styles và Computed
- Trên macOS, quá trình chạy servoshell ngay sau khi build đã nhanh hơn thêm vài giây
- Trong CI, clippy được chạy trong một job linting chuyên biệt tách riêng với tidy check hiện có
- Nhờ tiền quyên góp, một runner CI mới cho bản dựng Windows đã được thêm vào, giúp thời gian build chỉ dành cho Windows giảm 70%
- Một runner mới cho bản dựng Linux cũng sẽ sớm được thêm vào, và WPT try build dự kiến sẽ nhanh hơn
- Các buổi triage meeting để điều tra GitHub issue đang được tiến hành; buổi Servo issue triage meeting tiếp theo sẽ diễn ra vào 10:00 UTC ngày 2 tháng 9
- chi tiết có trong project#99
Cải thiện độ ổn định của engine
- Trong tháng 8, nhiều lỗi crash xảy ra trên các website thực tế đã được sửa
- Các ví dụ sửa lỗi chính trải rộng trên rendering, reflow và hoạt động của HTML parser
- crash xảy ra khi kết xuất float gần bảng trong HTML spec
- crash trên w3schools.com do explicit reflow không cần thiết
- sửa crash trên nhiều trang như kilonova.ro, tweakers.net bằng cách làm HTML parser có thể re-entrant
- Ngoài ra, số crash phát sinh trên các đường đi của nền tảng·API·parsing cũng đã giảm
- crash khi thay đổi kích thước cửa sổ trong lúc dùng WebGL trên macOS
- crash khi kết xuất văn bản có grapheme cluster rất dài
- crash khi kết xuất ký tự tab của một số phông chữ nhất định
- crash của parser sau khi gọi
window.stop() - crash khi truyền một số giá trị vào
console.log() - crash khi parse một số giá trị
<img srcset> - crash khi parse một số giá trị HTTP header
- crash khi thiết lập
window.openertrong một số tình huống nhất định - crash khi xóa iframe khỏi tài liệu
- crash khi gọi
new AudioContext()với tùy chọn không được hỗ trợ - crash thỉnh thoảng xảy ra trong
WRSceneBuilderkhi Servo thoát
- Nhiều lỗi crash BorrowError xảy ra trong GC của SpiderMonkey đã được sửa
- Công việc nhằm ngăn loại lỗi này bằng phân tích tĩnh vẫn đang được tiến hành
- Đối tượng DOM Window không còn bị leak khi điều hướng
- Trên Unix, servoshell sẽ kết thúc bất thường khi panic, nhờ đó web test có thể ghi nhận kết quả là “CRASH” một cách chính xác
Tình hình tài trợ
- Hiện Servo đang nhận 3.077 USD mỗi tháng từ các khoản quyên góp định kỳ, tăng 4,1% so với tháng 7
- Con số này bao gồm 12 khoản đóng góp qua LFX, nhưng Servo sẽ sớm ngừng nhận quyên góp qua LFX
- Các khoản quyên góp định kỳ nên được chuyển sang GitHub Sponsors hoặc Open Collective
- Servo cũng đã đăng ký trên thanks.dev, và đã có 3 tổ chức GitHub phụ thuộc vào Servo tài trợ
- Nếu bạn sử dụng các thư viện Servo như
url,html5ever,selectors,cssparser, bạn có thể đóng góp cho cộng đồng thông qua thanks.dev - Việc sử dụng quỹ được quyết định minh bạch bởi Technical Steering Committee; xem thêm tại Sponsorship page
1 bình luận
Ý kiến trên Hacker News
Tôi ngạc nhiên vì quy mô tài trợ nhận được quá nhỏ. Không rõ đây có phải chỉ tính các khoản tài trợ cá nhân từ bên thứ ba, không bao gồm các tổ chức lớn hay không
Nhìn vào số người lớn tiếng nói rằng trình duyệt web đã bị Google thống trị thông qua chrom(ium)e, tôi cứ nghĩ sẽ có nhiều cá nhân hoặc công ty quan tâm hơn để một đối thủ cạnh tranh xuất hiện sớm hơn
Cũng có nhận thức rằng việc tạo ra một trình duyệt hoàn toàn mới với một engine mới ngay từ đầu là không thực tế, nên có lẽ nhiều người thấy chẳng có lý do gì để tài trợ. May là Ladybird có thể đã thay đổi phần nào điều đó
Và trong số các tổ chức có tiền, một số đã bỏ cuộc rồi. Microsoft, công ty đã chuyển Edge sang Chromium vài năm trước, là ví dụ như vậy. Ngoài ra, nhiều người có lẽ sẽ thích quyên góp cho Firefox, một lựa chọn thay thế đã được khẳng định so với Chromium, hơn, nhưng trên thực tế việc quyên góp dành riêng cho phát triển Firefox lại khá khó
Có vẻ như phần lớn mọi người ở đây chỉ than phiền về tình trạng tồi tệ của web chứ thực ra không làm gì cả
Mọi người hãy cùng thể hiện những con số mạnh mẽ
Với cộng đồng HN, vượt 100.000 đô trong một ngày là chuyện dễ dàng. Một trình duyệt mới thực sự đáng để kỳ vọng đã xuất hiện, nên hãy làm được điều đó
Thật thú vị khi thấy Servo vẫn tiếp tục tồn tại. Tôi ủng hộ
Dù vậy, tôi nghĩ thật đáng mừng khi có những nỗ lực nghiêm túc nhằm phát triển các trình duyệt và engine thay thế. Trình duyệt Ladybird còn cách rất xa một sản phẩm trưởng thành, nhưng bản thân sự tồn tại của nó cũng là một dự án đáng hoan nghênh
Tôi vừa cập nhật các thay đổi mới nhất và mở tab mới thì ngạc nhiên khi thấy đã có hỗ trợ RTL. Vài tuần trước vẫn chưa có
Đây là PR đã được hợp nhất: https://github.com/servo/servo/pull/33148
Servo chẳng phải đã bị bỏ rơi rồi sao?