- Berdasarkan standar web component, hanya menambahkan reaktivitas, template deklaratif, dan boilerplate seminimal mungkin
- Ukurannya kecil di kisaran 5KB dengan rendering cepat, serta mengoptimalkan performa dan kecepatan muat dengan hanya memperbarui bagian UI yang berubah
- Semua komponen Lit adalah native web component, dan dapat digunakan kembali di mana pun HTML bisa digunakan tanpa bergantung pada framework
- Memanfaatkan Shadow DOM untuk membatasi cakupan style secara default, menyederhanakan selector CSS dan mencegah konflik dengan style lain
- Memodelkan API komponen dan state internal dengan Reactive Property, serta mendukung re-rendering yang efisien saat properti berubah
- Template berbasis Tagged template Literals yang cepat dan sederhana
- Dapat digunakan di berbagai proyek web, mulai dari komponen bersama, design system, hingga membangun aplikasi penuh yang mengurangi ketergantungan vendor dan memperkuat maintainability
- Tersedia tutorial
- GitHub
4 komentar
Sudah terasa sejak 3 tahun lalu, ini memang cepat untuk langsung memakai web component vanilla dan terasa seperti framework masa transisi, tapi lambat..
Maksudnya apa?
Kami mengembangkan tool operasional hanya dengan menggunakan web component standar web dan lit-html, dan bagus karena informasi yang perlu diketahui jadi sangat minim. Fitur yang kami pakai di lit-html juga hanya sebatas
event handler binding+loop templating. (Sisanya cukup dengan standar web saja ..) Memang ada ketidaknyamanan karena jika ada perubahan kita harus memanggilrendersecara langsung, tetapi dibanding perilaku implisit yang otomatis mendeteksi perubahan variabel, ada sisi di mana pemanggilan yang eksplisit justru lebih membantu. Karena ini tool operasional, mungkin saya merasa begitu karena prioritas untuk mendukung berbagai lingkungan memang lebih rendah.Komentar Hacker News
Kami sudah memakai framework yang berat, lalu seseorang menambahkan Lit hanya agar ada satu baris lagi di resume, dan itu jadi beban besar
Shadow DOM khususnya membuat masalah aksesibilitas (A11y) jadi lebih parah
Karena cakupan
idterpisah, keterkaitan sepertilabel-for,describe-by, dan sejenisnya jadi rusak, jadi kami sangat kerepotanTentu saja, sampai batas tertentu ini juga masalah kurangnya skill di tim kami
Styling memang jadi terisolasi, tetapi bagian penting seperti ukuran font adalah pengecualian, jadi setiap kali diganti terus muncul bug regresi kecil
DX juga banyak menurun, saya berharap tooling membaik, tapi untuk sekarang situasinya melelahkan
Sebenarnya, rasanya lebih sering orang mengadopsinya begitu saja karena ingin mencoba hal baru
Ini bekerja dengan baik saat komponen bersarang saling berinteraksi dalam aplikasi kompleks, mirip React tetapi jauh lebih native browser, boilerplate lebih sedikit, dan rendering juga cepat
Sampai-sampai saya tidak mengerti kenapa Lit tidak lebih populer
Fitur intinya ternyata cukup sederhana, dan sebagian besar bergantung pada API platform
Karena itu siapa pun bisa membuat implementasinya sendiri, dan saya rasa kesederhanaan ini punya nilai besar
Sebagai referensi, implementasi alternatif yang saya buat ada di https://github.com/ruphin/lite-html
lit-htmlbenar-benar berguna, jadi saya memakainya di hampir semua proyek pribadiBisa langsung dimuat lewat CDN dan bereksperimen tanpa build step juga merupakan kelebihan besar
Tidak seberat framework lain, dan rasanya seperti hanya memakai Vanilla JS + HTML, jadi hampir tidak ada beban kognitif
Shadow DOM pada dasarnya adalah private tree yang memisahkan DOM internal komponen
Ini memungkinkan konsep slot, sehingga kita bisa membuat komponen yang benar-benar dapat dikomposisikan
Masalahnya, enkapsulasi style menjadi hambatan besar saat diintegrasikan dengan sistem yang sudah ada
Karena itu saya mengusulkan Open Styleable Shadow Roots, yaitu pendekatan yang membiarkan style eksternal mengalir ke dalam sambil tetap mempertahankan slot. Saya masih berusaha meyakinkan vendor browser
Terkait itu, ada juga tulisan yang saya buat: https://medium.com/gitconnected/getting-started-with-web-com...
Kadang saya juga bertanya-tanya kenapa ini tidak dipakai lebih luas
Awalnya berbasis Backbone.js, lalu diganti secara bertahap dari lit-html → lit-element → lit
Sekarang disediakan sebagai Web Component
<converse-root />, jadi bisa terintegrasi baik dengan framework lain seperti ReactGitHub: https://github.com/conversejs/converse.js / demo: https://chat.conversejs.org/
Kalau di server memakai sistem template seperti JSX, itu sudah cukup enak, dan di klien tetap hanya JS jadi tidak ada kekhawatiran soal upgrade
Hanya saja API native terlalu low-level, jadi DX-nya kurang, dan Lit menambahkan reaktivitas deklaratif di atasnya
Hal-hal yang merepotkan kalau dibuat sendiri bisa ditangani dengan rapi
htmlmilik Lit dan JSXBahkan JSX lebih merepotkan karena membutuhkan tahap kompilasi
Awalnya saya membuat Web Components sendiri di lingkungan tanpa dependensi, lalu setelah pindah ke LitElement semuanya jadi jauh lebih nyaman
Namun Shadow DOM, meski jadi default, justru kadang menimbulkan lebih banyak masalah, jadi sekarang saya memakai LitElement tanpa Shadow DOM
Kelebihan terbesarnya adalah berdiri di atas fondasi yang stabil
Karena Web Components native didukung stabil di semua browser, kita bisa fokus pada pengembangan tanpa risiko harus ganti framework
Saya harap lebih banyak tim mau mencobanya
Sebagai referensi, saya juga merekomendasikan video HTTP 203 tentang Lit
Angular terlalu berat, dan React dirancang untuk keterbatasan browser lama, jadi sekarang rasanya hanya bertahan karena inersia
Dibanding boilerplate Angular atau kompleksitas hook React, ini jauh lebih intuitif
Hanya saja sayang tidak berhasil menjadi populer
Menurut saya, pada dasarnya kombinasi
+ Web Componentssaja sudah cukupTapi saya penasaran, apa keuntungan membuatnya ulang dengan Lit alih-alih tetap memakai Vue
Manajemen state ref/reactive di Vue 3 kuat, dan bisa diuji tanpa bergantung pada DOM
Reaktivitas Lit ada di level widget, jadi trigger update harus dikelola sendiri
Lifecycle Vue sederhana, sedangkan di Lit harus memperhatikan banyak callback sehingga bug lebih mudah muncul
Kalau tidak ada alasan khusus, lebih baik fokus ke pengembangan fitur, dan mengganti tech stack hampir tidak berdampak bagi pengguna
Vue adalah framework, jadi fiturnya lebih banyak, sementara Lit diimplementasikan lebih dekat ke API native
Vue perlu build, sedangkan Lit bisa dimuat saat runtime
Vue juga bisa dikompilasi ke target lain, sedangkan Lit khusus untuk Web Components sehingga lebih bersih
Pada akhirnya yang paling penting adalah memakai teknologi yang paling dikuasai tim
Konsumen tidak peduli implementasi internal, yang penting ukuran dan API
Toh nanti orang lain akan membuat adapter sesuai lingkungan mereka sendiri