- Servo đã nhận khoản tài trợ từ NLnet vào tháng 7/2023 để tăng cường các tính năng layout cốt lõi, như một lựa chọn thay thế nhẹ và hiệu năng cao để nhúng công nghệ web vào ứng dụng
- Phạm vi cải thiện tập trung vào hoàn thiện CSS float, mở rộng hỗ trợ đa ngôn ngữ trong inline layout, và bổ sung hỗ trợ
<table>ban đầu - CSS float đã được phát triển liên tục từ giữa năm 2023, với mục tiêu nâng tỷ lệ vượt qua các bài kiểm thử WPT liên quan lên trên 80%
- Inline layout hiện còn thiếu khả năng chọn phông chữ cần thiết cho việc hiển thị các ký tự không phải Latin, hỗ trợ chữ viết từ phải sang trái và logical properties
- Việc engine layout mới chưa hỗ trợ table làm hỏng việc hiển thị của nhiều trang web, nên mục tiêu thực tế trước mắt là render được các table trên Wikipedia
Các hạng mục Servo được tăng cường nhờ tài trợ NLnet
- Servo đã nhận khoản tài trợ từ NLnet vào tháng 7/2023 để cải thiện nhiều tính năng liên quan đến layout
- Có thể tóm gọn ba mục tiêu chính như sau
- Hoàn thiện hỗ trợ float của Servo
- Hỗ trợ thêm nhiều ngôn ngữ hơn trong inline layout
- Bổ sung hỗ trợ
<table>ban đầu
Mục tiêu và tiến độ theo từng tính năng layout
-
Floats
- Hỗ trợ float của Servo đã được phát triển từ giữa năm 2023
- Vẫn còn những vấn đề cần giải quyết trước khi có thể xem đây là một triển khai tuân thủ hoàn toàn CSS float
- Mục tiêu là đạt tỷ lệ vượt qua WPT trung bình trên 80% cho
/css/CSS2/floats/và/css/CSS2/floats-clear/ - Có thể theo dõi kết quả trên WPT dashboard
- Tuần trước, các bài kiểm thử
/css/CSS2/floats/đã vượt mục tiêu với tỷ lệ 82.2% /css/CSS2/floats-clear/hiện ở mức 73.3% và đang dần tiến gần mục tiêu
-
More languages in inline layout
- Engine layout của Servo còn thiếu các tính năng cốt lõi cần thiết để hiển thị những ngôn ngữ không dùng bảng chữ cái Latin
- Các hạng mục được tăng cường bao gồm chọn phông chữ chính xác, hỗ trợ chữ viết từ phải sang trái và logical properties
- Mục tiêu là mở rộng phạm vi hỗ trợ của inline layout để Servo có thể hiển thị nội dung đa dạng hơn
-
Initial
<table>support- HTML table là một tính năng web quan trọng và được sử dụng rộng rãi
- Engine layout mới của Servo hiện chưa hỗ trợ table, khiến nhiều bố cục trang web không hiển thị đúng
- Mục tiêu ưu tiên của hỗ trợ table ban đầu là có thể render các table được dùng trên Wikipedia
- Khi từng mốc tiến độ được thực hiện và hoàn thành, nội dung này sẽ được đề cập chi tiết hơn trong các bài blog sau
1 bình luận
Ý kiến trên Hacker News
Tôi rất kỳ vọng vào Servo, và thật khó tin là Mozilla lại không quan tâm đến nó
Ý tưởng về một engine vừa bảo mật vừa có hiệu năng cao đã rất hay, nhưng điều tôi đặc biệt thích là có thể dùng web engine như một component
Thời Windows 9x, IE có các điều khiển ActiveX nên có thể nhúng web engine ở khắp nơi, KHTML cũng tương tự, nhưng ngày nay cả Firefox lẫn Chrome dường như đều không còn quan tâm đến mục đích sử dụng đó
May là vẫn có Qt WebEngine, nhưng theo tôi hiểu thì phía Chrome không mấy để tâm đến kiểu use case này nên mối quan hệ có phần hơi khó xử
Hơn nữa Chrome là sản phẩm của Google, mà theo kinh nghiệm của tôi thì các sản phẩm Google thường có một thế giới riêng, khiến việc build và tích hợp trở nên phiền phức
Vì vậy tôi rất mong có một lựa chọn thay thế thực dụng, có thể đưa vào code, vừa giải quyết được các lo ngại về bảo mật vừa giảm bớt nỗi đau tích hợp
Mozilla đã tài trợ nó như một dự án nghiên cứu, rồi nhận ra rằng để thật sự tung ra thị trường sẽ còn cần nhiều tiền và thời gian hơn rất nhiều, nên gần với việc họ quyết định tiết kiệm chi phí hơn
Tuy vậy, vẫn có vấn đề là số tiền đó đã được phân bổ cho ban điều hành và những nơi khác theo cách không phù hợp với các giá trị đạo đức mà chính họ đề cao
Nếu nhìn các bài blog, Mozilla đã tích hợp vào Firefox những gì có thể lấy từ Servo, nên có thể nói họ cũng đã thu được một phần giá trị từ dự án
Tôi nghĩ nếu ai đó cho Mozilla rất nhiều tiền và một lịch trình không giới hạn thì họ đã hoàn thiện Servo rồi
Nhưng ngay khi CEF trở nên phổ biến, Google đã dồn nhiều nguồn lực để chặn đăng nhập Google từ CEF và các trình duyệt nhúng khác[0]
Vì chuyện này mà tôi đã phải từ bỏ một trình duyệt dựa trên CEF, và dù kiểu làm ăn đó thật đáng ghét thì cũng chẳng làm gì được
Nếu trình duyệt của tôi không thể đăng nhập vào các sản phẩm Google thì rất khó được dùng rộng rãi, và tôi cũng không có thời gian để chơi trò mèo vờn chuột với cơ chế phát hiện của Google
Để component trình duyệt nhúng trở thành xu hướng chính, đủ để bất kỳ ai cũng có thể tạo trình duyệt, trước hết phải giải quyết chuyện các công ty lớn chặn những trình duyệt nhúng trở nên phổ biến
Lý tưởng nhất là sẽ có một Gecko có thể nhúng được, không phải Android, vì Firefox quá lớn để có thể chặn kiểu đó
Trước đây cũng đã có nhiều bàn luận về chuyện này, và tôi từng thử cả một proof of concept kiểu chiếm dùng window handle[1], nhưng nó không kiếm ra tiền
0 - https://developers.googleblog.com/2016/08/modernizing-oauth-...
1 - https://github.com/cretz/ffembedpoc
Tôi không rõ bạn muốn nói gì, nhưng họ đã đưa nhiều component sang Gecko, bao gồm WebRender và Stylo
Tôi nhớ là khi hình nền desktop bị lỗi thì trên desktop sẽ hiện một trang lỗi ActiveX có các liên kết có thể bấm được, thật sự rất rối rắm
Trên macOS và Linux thì nó hoạt động rất tốt
Dù vậy, vẫn cần nhiều web engine có thể nhúng hơn nữa
Gecko thì tốt, nhưng việc nó bị trói chặt với XULRunner gần như vĩnh viễn đang cản trở nó
Thật vui khi thấy công việc với Servo vẫn tiếp tục sau khi Igalia tiếp quản
Có khá nhiều technical debt tích tụ do nhiều năm chỉ được bảo trì ở mức tối thiểu, nhưng có vẻ giờ đã có tiến triển thực sự
Cá nhân tôi muốn họ đẩy mạnh tính mô-đun hơn nữa
Có vẻ đang tồn tại một thị trường ngách mà một browser engine mã nguồn mở tập trung vào khả năng nhúng có thể lấp đầy, và nếu xuất hiện một thư viện “tự lắp trình duyệt” cho phép mọi người trộn ghép như các khối Lego để tạo engine mới, điều đó cũng có thể rất có ích cho sức khỏe lâu dài của nền tảng web
Nếu có Electron tích hợp Servo hay một thứ gì đó tương tự Electron thì có thể sẽ mang lại kết quả tốt
Tauri đã phần nào lấp khoảng trống đó, nhưng nó dùng những gì hệ điều hành cung cấp thay vì nhúng một thứ gì đó
Sẽ hay nếu có một lựa chọn nằm đâu đó ở giữa
Ví dụ như Sciter [1] chỉ triển khai một tập con hợp lý của DOM API mà vẫn thành công ở mức nào đó
Nó không thực sự phù hợp cho lướt web Internet nói chung, nhưng nếu dùng như một thư viện UI thì chỉ cần tránh các phần không hoạt động là được
1: https://sciter.com/
Mô hình component và lớp nhúng đều có cấu trúc như vậy
Nguồn tiền của khoản tài trợ này một phần đến từ European Commission, thông qua chương trình NGI
Đây thật sự là tin rất tốt cho Servo
NLNet Foundation gần đây đang hỗ trợ nhiều dự án rất xuất sắc, và tôi thấy cái tên này xuất hiện thường xuyên
Tôi cần hỗ trợ để tiếp tục thúc đẩy một vài vấn đề, và thực tế đúng là đã nhận được
Chúng tôi chủ yếu ở Bắc Mỹ, nên việc nguồn tài trợ đến từ EU là một kiểu hỗ trợ rất có tầm nhìn xa
Một trình duyệt khác được xây dựng lại từ đầu là Ladybird cũng đáng để xem
Nó đang được phát triển bởi một nhóm indie có phần chắp vá hơn: https://ladybird.dev/
Nói thật thì đây đúng là một dự án rất "men lì"
Nếu xét đây vẫn là một dự án còn rất non trẻ thì những gì đã làm được đã khá ấn tượng
Chỉ cần chụp thử vài ảnh màn hình thôi cũng thấy bộ kết xuất của Servo rất cơ bản, chậm và nhiều lỗi
Nó nhanh và mọi thứ đều được xây dựng công khai, nên những gì đội Ladybird đang làm rất ấn tượng
Không hiểu sao tôi cứ nghĩ Servo đã được tích hợp vào Firefox rồi
Có cách nào trong Rust để render HTML thành ảnh mà không cần khởi chạy cả trình duyệt không?
Không cần hỗ trợ quá nhiều HTML hay CSS
https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-f...
Có lẽ còn những phần khác nữa
Tuy nhiên có hai điểm khác biệt: nó chỉ hỗ trợ Markdown chứ không phải HTML tùy ý, và nó render lên màn hình chứ không phải thành ảnh
Dù vậy đây vẫn là một điểm khởi đầu tốt
Hiện tại nút thắt lớn nhất của việc render web trong Rust, theo tôi, là bố cục văn bản tốt hơn, đặc biệt là hỗ trợ chèn nội dung không phải văn bản vào trong văn bản như
display: inline-blockNếu phần đó được triển khai thì việc render các trang web cơ bản có lẽ sẽ làm khá ổn
Chúng lần lượt là bộ tổng hợp dựa trên GPU và engine CSS
Servo là engine kết xuất web viết bằng Rust, hỗ trợ WebGL và WebGPU, và có thể tùy chỉnh cho các ứng dụng desktop, mobile và embedded
Đây là một engine kết xuất web có thể nhúng, độc lập, với tính an toàn bộ nhớ, tính mô-đun và khả năng xử lý song song
Legacy Layout được dùng làm đối tượng so sánh là gì?
Có phải là phiên bản lặp trước đó của Servo không?
Có vẻ một phần mã vẫn được dùng ở cả hai bên, và các đường biểu diễn đôi khi tăng giảm cùng lúc, nhưng không phải lúc nào cũng vậy
Sau đó, khi triển khai một số phần của đặc tả CSS, người ta gặp những vấn đề không khớp gọn gàng với kiến trúc Layout 2013, nên hệ thống thứ hai là Layout 2020 đã được khởi động để giải quyết
Năm nay có một báo cáo hay trên wiki của Servo do phía Igalia viết, tóm tắt sự khác biệt giữa hai hệ thống và lý do họ quyết định tiến tới Layout 2020
https://github.com/servo/servo/wiki/Servo-Layout-Engines-Rep...