3 điểm bởi GN⁺ 2024-03-22 | 3 bình luận | Chia sẻ qua WhatsApp

Giới thiệu về Dropflow

  • Dropflow là một công cụ layout CSS được tạo ra để khám phá phạm vi của các tiêu chuẩn CSS cơ bản (inline, block, float, positioning, table, v.v.).
  • Hỗ trợ triển khai layout văn bản chất lượng cao và có thể hiển thị nhiều ngôn ngữ trên thế giới.
  • Có thể dùng ở backend với Node và node-canvas để tạo PDF hoặc hình ảnh, hoặc trong trình duyệt để render văn bản phong phú có xuống dòng trên canvas.

Tính năng chính

  • Hỗ trợ hơn 30 thuộc tính phức tạp như float
  • Hỗ trợ văn bản hai chiều và RTL
  • Ngoài việc nhận HTML và CSS, còn hỗ trợ API Hyperscript (h()) để định kiểu bằng đối tượng
  • Cần đăng ký mọi buffer OpenType/TrueType
  • Font fallback ở cấp độ grapheme
  • Hỗ trợ dấu phát âm có màu
  • Ngắt dòng mong muốn hơn (ví dụ: chuyển phần đệm đầu dòng sang dòng tiếp theo)
  • Shaping được tối ưu hóa
  • Style kế thừa và cascading không bị tính toán hai lần
  • Xử lý nhiều edge case của layout CSS nhất có thể
  • Typing đầy đủ
  • Nhiều bài kiểm thử
  • Nhanh

Các quy tắc CSS được hỗ trợ

  • Định dạng inline: các thuộc tính như color, direction, font-family, font-size, font-stretch, font-style, font-weight, line-height, text-align, vertical-align, white-space đang hoạt động.
  • Định dạng block: các thuộc tính clear, float đang hoạt động.
  • Box và positioning: các thuộc tính như background-clip, background-color, border-color, border-style, border-width, top, right, bottom, left, box-sizing, display, height, margin, padding, position, width, z-index đang hoạt động.

Cách sử dụng

  • Dropflow hoạt động trên DOM có style kế thừa và style đã được tính toán.
  • Tạo DOM bằng hàm h() và chỉ định style dưới dạng đối tượng thông thường.
  • Đăng ký font trước khi layout là bước bắt buộc.
  • Có thể layout và vẽ theo toàn bộ kích thước của canvas.

Đặc điểm hiệu năng

  • Hiệu năng là mục tiêu quan trọng thứ hai sau độ chính xác.
  • Có thể kiểm tra hiệu năng qua nhiều ví dụ.
  • Trên MacBook Pro 2019, việc chuyển HTML thành hình ảnh mất 9ms; trên MacBook Pro 2012 mất 13ms.
  • Việc chuyển 'The Little Prince' từ HTML thành hình ảnh mất dưới 160ms trên MacBook Pro 2019 và dưới 250ms trên MacBook Pro 2012.
  • Việc tạo và layout một từ dài 10 ký tự (không bao gồm vẽ) mất dưới 25µs trên MacBook Pro 2019 và dưới 50µs trên MacBook Pro 2012.
  • Dùng Hyperscript API có thể bỏ qua bước parse HTML và CSS, tạo DOM trực tiếp để đạt hiệu năng nhanh nhất.

API

  • Đăng ký font và tạo DOM là hai bước đầu tiên.
  • Có thể render DOM lên canvas hoặc dùng các hàm cấp thấp nếu muốn giữ lại layout.

HarfBuzz

  • Layout glyph được thực hiện bởi HarfBuzz đã được biên dịch sang WebAssembly.
  • Điều này cho phép đạt được mức độ chính xác mà khi dùng API measureText là không thể.

Lời cảm ơn

  • dropflow không có dependency package.json, nhưng có được là nhờ nhiều dự án khác.
  • Các dependency Javascript đã được chỉnh sửa cho phù hợp với dự án và được check in.

Ý kiến của GN⁺

  • Dropflow là một công cụ mới giúp các nhà phát triển web giải quyết độ phức tạp của layout CSS và cung cấp layout văn bản nhất quán ở cả trình duyệt lẫn backend.
  • Những công cụ như vậy có thể đặc biệt hữu ích trong việc phát triển các ứng dụng web quốc tế hóa cần hỗ trợ nhiều ngôn ngữ và font khác nhau.
  • Việc sử dụng HarfBuzz có thể cải thiện đáng kể độ chính xác của render văn bản, nhưng cũng có thể là rào cản tiếp cận đối với các nhà phát triển chưa quen với công nghệ WebAssembly.
  • Các dự án khác cung cấp tính năng tương tự gồm những thư viện layout dùng CSS Grid và Flexbox, nhưng Dropflow tập trung vào cách layout CSS truyền thống hơn.
  • Trước khi áp dụng Dropflow, cần đánh giá xem nó có phù hợp với yêu cầu dự án hay không, đồng thời cân nhắc hiệu năng và khả năng tương thích.

3 bình luận

 
winterjung 2024-03-23

Tiêu đề gốc là "Show HN: Dropflow, một công cụ bố cục CSS cho node hoặc <canvas>" thì phải. Bây giờ lại đang được đưa vào là "GN⁺: Giới thiệu HN: Dropflow, một công cụ bố cục CSS cho node hoặc <canvas></canvas>".

 
dlehals2 2024-03-22

Trong tiêu đề có thẻ nên phần tiêu đề ở trang chi tiết bị vỡ rồi.. haha, phải escape thôi..

 
GN⁺ 2024-03-22
Ý kiến Hacker News
  • Nhấn mạnh tầm quan trọng của các tài liệu giải thích rõ ràng “chiếc hộp ma thuật” là engine render của trình duyệt. Nếu có thể tạo ra một bộ đặc tả đầy đủ, máy có thể đọc được cho việc render HTML và CSS, thì có thể tạo ra một renderer, và các điểm đặc thù của trình duyệt có thể là phần mở rộng của nó.
  • Bày tỏ lời cảm ơn vì công trình này được cung cấp dưới dạng mã nguồn mở. Cách hiện tại để tạo PDF đẹp ở backend là chạy trình duyệt headless và dùng API trình duyệt để chuyển HTML/CSS sang PDF, nhưng việc chạy các instance trình duyệt trên server và mở rộng phù hợp cho khối lượng công việc lớn là rất tốn kém. Giờ đây có thể thiết kế và tạo PDF bằng HTML/CSS mà không có overhead của trình duyệt.
  • Liên hệ điều này với sự tò mò về việc liệu có thể dùng CSS và SVG như một lớp trừu tượng cho các thư viện đồ họa và UI hay không. Có vẻ như node-canvas đảm nhiệm phần vẽ, và điều này dường như có thể xử lý phần layout cần thiết trong một thư viện UI. Đồng thời đặt câu hỏi về mức độ khó của việc triển khai CSS.
  • Cho biết đã tìm kiếm thứ như thế này cho dự án của mình và nói rằng nó cũng sẽ hữu ích cho các dự án khác dùng SVG hoặc canvas.
  • Nói rằng phần lớn mọi người có lẽ không nhận ra việc chuyển HTML sang PNG theo cách lập trình khó đến mức nào. Người ta sẽ phải đối mặt với vô số vấn đề nhỏ liên quan đến sự khác biệt giữa Node và trình duyệt, hoặc giữa HTML và canvas.
  • Đưa ra ý kiến rằng không thể tưởng tượng nổi khối lượng công việc khổng lồ cần thiết để hiểu CSS và xây dựng một engine layout xung quanh nó.
  • Với những ai đang gặp khó với Flexbox, giới thiệu một công cụ có thể đơn giản hóa quá trình tạo layout responsive mà không cần phải tập trung vào nhiều thuộc tính khác nhau.
  • Gửi lời chúc mừng vì đây là một thành tựu lớn. Tin rằng hẳn đã có rất nhiều thời gian được đầu tư, đồng thời bày tỏ sự tò mò liệu họ cũng đang làm sản phẩm bảng tính và sản phẩm PDF (preview?) hay không, và chúng được kết hợp với nhau như thế nào.
  • Khen ngợi công việc này và gửi lời cảm ơn tới chearon.
  • Chia sẻ rằng sẽ xem xét khả năng dùng nó như nền tảng cho những thứ như NativeScript hoặc Node.js. Văn bản là một trong những thành phần UI phức tạp nhất mà các UI framework phải cung cấp, và nếu Flow Layout hoạt động tốt thì điều đó rất đáng khích lệ. Cũng bày tỏ sự quan tâm đến việc các tính năng như gesture (đặc biệt là tô sáng văn bản) và tích hợp IME đã tiến triển đến đâu. Dù sao đi nữa, vẫn gửi lời khen vì đã phát hành nó dưới dạng mã nguồn mở.