- Dựa trên tiêu chuẩn web component, chỉ bổ sung tính phản ứng, template khai báo và lượng boilerplate tối thiểu
- Kích thước nhỏ khoảng 5KB cùng khả năng render nhanh, chỉ cập nhật phần UI đã thay đổi để tối ưu hiệu năng và tốc độ tải
- Mọi component Lit đều là web component native, có thể tái sử dụng ở bất cứ đâu dùng được HTML, không phụ thuộc framework
- Tận dụng Shadow DOM để mặc định giới hạn phạm vi style, giúp đơn giản hóa CSS selector và tránh xung đột với các style khác
- Dùng Reactive Property để mô hình hóa API component và trạng thái nội bộ, hỗ trợ rerender hiệu quả khi thuộc tính thay đổi
- Template dựa trên Tagged template Literals nên nhanh và đơn giản
- Có thể dùng cho nhiều dự án web khác nhau, từ component dùng chung, design system cho đến xây dựng toàn bộ ứng dụng nhằm giảm phụ thuộc vào vendor và tăng khả năng bảo trì
- Có hướng dẫn
- GitHub
4 bình luận
Cảm giác của tôi từ 3 năm trước là đây là một thư viện nhanh để dùng ngay với web component thuần và cũng giống như một framework giai đoạn quá độ, nhưng chậm..
Nghĩa là gì?
Tôi đang phát triển các công cụ vận hành chỉ bằng web component chuẩn của web và
lit-html, và tôi thấy rất ổn vì lượng thông tin cần phải biết được giảm xuống mức tối thiểu. Tronglit-html, tôi chỉ dùng khoảng binding event handler và loop templating. (Còn lại thì tiêu chuẩn web là đủ rồi..)Có chút bất tiện là khi có thay đổi thì phải tự gọi
rendertrực tiếp, nhưng mặt khác, so với việc tự động phát hiện thay đổi biến và có những hành vi ngầm không tường minh, thì cách gọi tường minh này cũng có điểm hữu ích. Vì là công cụ vận hành nên ưu tiên hỗ trợ nhiều môi trường không cao, có lẽ vì thế mà tôi cảm thấy như vậy.Ý kiến trên Hacker News
Bọn tôi vốn đã dùng một framework nặng rồi, nên việc ai đó thêm Lit chỉ để có thêm một dòng trong CV đã trở thành gánh nặng lớn
Shadow DOM đặc biệt khiến các vấn đề về khả năng truy cập (A11y) trở nên nghiêm trọng hơn
Khi phạm vi
idbị tách ra, các liên kết nhưlabel-for,describe-bybị hỏng nên đã phải vật lộn rất nhiềuTất nhiên, một phần cũng là do đội của chúng tôi thiếu kỹ năng
Dù style được scope, những phần quan trọng như cỡ chữ lại là ngoại lệ, nên mỗi lần thay thế lại phát sinh các bug hồi quy nhỏ liên tục
DX cũng giảm đi khá nhiều; tôi hy vọng tooling sẽ tốt hơn, nhưng hiện tại thì đúng là mệt mỏi
Thực ra có vẻ thường là họ chỉ muốn thử cái mới rồi áp dụng mà không cần biện minh gì nhiều
Nó hoạt động tốt khi các component lồng nhau tương tác trong ứng dụng phức tạp; khá giống React nhưng native với trình duyệt hơn nhiều, ít boilerplate hơn và render cũng nhanh hơn
Đến mức tôi không hiểu vì sao Lit lại không phổ biến hơn
Tính năng cốt lõi hóa ra lại khá đơn giản, và phần lớn dựa vào platform API
Vì thế ai cũng có thể tự triển khai, và tôi nghĩ chính sự đơn giản đó là giá trị lớn
Tham khảo, bản triển khai thay thế tôi làm là https://github.com/ruphin/lite-html
lit-htmlthực sự rất hữu ích nên tôi dùng nó cho gần như mọi dự án cá nhânViệc có thể gọi trực tiếp qua CDN và thử nghiệm mà không cần bước build cũng là một lợi thế lớn
Nó không nặng như các framework khác, và cảm giác chỉ như đang dùng Vanilla JS + HTML, nên gần như không có gánh nặng nhận thức
Shadow DOM về cơ bản là một cây riêng tư tách DOM bên trong component ra
Nhờ đó khái niệm slot mới khả thi, và có thể tạo ra những component thực sự có thể kết hợp được
Vấn đề là việc đóng gói style trở thành rào cản lớn khi tích hợp với các hệ thống sẵn có
Vì vậy tôi đã đề xuất Open Styleable Shadow Roots, theo hướng cho phép style bên ngoài chảy vào bên trong mà vẫn giữ được slot. Tôi vẫn đang cố thuyết phục các browser vendor
Tôi cũng có viết một bài liên quan: https://medium.com/gitconnected/getting-started-with-web-com...
Đôi khi tôi cũng tự hỏi vì sao nó chưa được dùng rộng rãi hơn
Ban đầu nó dựa trên Backbone.js, rồi được thay thế dần theo thứ tự lit-html → lit-element → lit
Hiện tại nó được cung cấp dưới dạng Web Component
<converse-root />, nên cũng tích hợp tốt với các framework khác như ReactGitHub: https://github.com/conversejs/converse.js / Demo: https://chat.conversejs.org/
Nếu dùng hệ thống template kiểu JSX ở phía server là đủ dễ chịu rồi, còn phía client chỉ là JS nên cũng không phải lo chuyện nâng cấp
Chỉ là native API quá mức thấp nên DX còn thiếu, và Lit thêm phản ứng khai báo lên phía trên nó
Nó giải quyết gọn ghẽ những phần mà nếu tự làm sẽ rất phiền
htmlcủa Lit và JSXThậm chí JSX còn rườm rà hơn vì cần bước biên dịch
Lúc đầu tôi tự làm Web Components trong môi trường không có dependency, nhưng sau chuyển sang LitElement thì tiện hơn rất nhiều
Tuy vậy, Shadow DOM dù là mặc định nhưng đôi khi lại tạo thêm vấn đề, nên giờ tôi dùng LitElement mà không dùng Shadow DOM
Ưu điểm lớn nhất là nó đứng trên một nền tảng ổn định
Native Web Components được hỗ trợ ổn định trên mọi trình duyệt, nên có thể tập trung phát triển mà không phải chịu rủi ro phải thay framework
Tôi mong sẽ có nhiều đội thử hơn
Nhân tiện, tôi cũng khuyên xem video HTTP 203 về Lit
Angular quá nặng, còn React thì được thiết kế để phù hợp với giới hạn của trình duyệt đời cũ, nên giờ có cảm giác nó chỉ còn tồn tại nhờ quán tính
So với boilerplate của Angular hay sự phức tạp của hooks trong React thì nó trực quan hơn nhiều
Chỉ tiếc là nó không đạt được độ phổ biến
Về cơ bản tôi nghĩ chỉ cần tổ hợp
+ Web Componentslà đủNhưng tôi tò mò không biết việc làm lại bằng Lit thay vì Vue thì có lợi ích gì
Quản lý trạng thái ref/reactive của Vue 3 rất mạnh, và có thể test mà không phụ thuộc DOM
Tính phản ứng của Lit ở mức widget, nên phải tự quản lý trigger cập nhật
Vòng đời của Vue đơn giản, còn Lit phải để ý nhiều callback nên dễ phát sinh bug hơn
Nếu không có lý do đặc biệt thì tốt hơn hết là tập trung vào phát triển tính năng, vì thay stack công nghệ gần như không ảnh hưởng gì tới người dùng
Vue là framework nên nhiều tính năng hơn, còn Lit thì triển khai theo hướng gần native API hơn
Vue cần build, còn Lit có thể load ở runtime
Vue có thể compile sang các target khác, còn Lit chỉ dành cho Web Components nên gọn hơn
Cuối cùng, điều quan trọng nhất vẫn là dùng công nghệ mà đội ngũ quen thuộc hơn
Người dùng không quan tâm cách hiện thực bên trong; họ chỉ quan tâm kích thước và API
Dù sao thì người khác cũng sẽ tự làm adapter để dùng cho phù hợp với môi trường của họ