- web component standards पर आधारित, इसमें reactivity, declarative templates, और बहुत कम boilerplate जोड़ा गया है
- लगभग 5KB का छोटा आकार और तेज़ rendering; UI के केवल बदले हुए हिस्सों को update करके performance और loading speed को optimize करता है
- सभी Lit components native web components हैं, इसलिए framework से स्वतंत्र रूप से जहाँ भी HTML इस्तेमाल हो सकता है वहाँ दोबारा उपयोग किए जा सकते हैं
- Shadow DOM का उपयोग कर डिफ़ॉल्ट रूप से style scope को सीमित करता है, जिससे CSS selectors सरल होते हैं और दूसरे styles के साथ टकराव रुकता है
- Reactive Property के जरिए component API और internal state को model करता है, और property बदलने पर efficient re-rendering को support करता है
- Tagged template Literals आधारित templates की वजह से यह तेज़ और सरल है
- shared components, design systems, vendor dependency कम करने, और maintainability बेहतर बनाने वाले full app build तक, कई तरह के web projects में इस्तेमाल किया जा सकता है
- ट्यूटोरियल उपलब्ध
- GitHub
4 टिप्पणियां
मुझे 3 साल पहले से ऐसा लग रहा है, लेकिन vanilla web components को सीधे इस्तेमाल करने के लिए यह तेज़ है और एक transitional framework जैसा महसूस होता है, फिर भी धीमा..
इसका क्या मतलब है?
हम web standards के web component और lit-html का ही इस्तेमाल करके operations tools विकसित कर रहे हैं, और यह अच्छा लगता है क्योंकि जानने वाली जानकारी न्यूनतम रहती है। lit-html में हम जिन फीचर्स का उपयोग करते हैं, वे लगभग सिर्फ event handler binding और loop templating तक सीमित हैं। (बाकी के लिए web standards ही काफी हैं..) बदलाव होने पर
renderको सीधे कॉल करना पड़ता है, यह थोड़ा असुविधाजनक है, लेकिन अपने-आप variable changes को पकड़कर अप्रत्यक्ष रूप से काम होने देने की बजाय, explicit call कुछ मामलों में मददगार भी होती है। चूंकि ये operations tools हैं, अलग-अलग environments को सपोर्ट करना कम प्राथमिकता है, इसलिए शायद मुझे ऐसा महसूस हुआ हो।Hacker News राय
हम पहले से ही एक भारी framework इस्तेमाल कर रहे थे, और किसी ने शायद अपने resume में एक लाइन और जोड़ने के लिए Lit जोड़ दिया, जो बड़ा बोझ बन गया
Shadow DOM ने खासकर accessibility (A11y) की समस्याओं को और गंभीर बना दिया
idscope अलग हो जाने सेlabel-for,describe-byजैसी लिंकिंग टूट जाती थी, और इससे बहुत परेशानी हुईबेशक, कुछ हद तक यह हमारी टीम की skill की कमी की समस्या भी थी
styles scope हो जाते हैं, लेकिन font size जैसी अहम चीज़ें अपवाद रहती हैं, इसलिए हर replacement के साथ छोटे-छोटे regression bugs आते रहे
DX भी काफी खराब हुआ, tooling के बेहतर होने की उम्मीद है, लेकिन अभी के लिए यह बस थकाने वाला अनुभव है
असल में, अक्सर लोग बस कुछ नया try करना चाहते हैं, और बिना ज़्यादा तर्क के उसे अपना लेते हैं
यह complex apps में nested components के interaction के साथ अच्छी चली, और React जैसी होने के बावजूद कहीं ज़्यादा browser-native है, boilerplate कम है, और rendering भी तेज़ है
मुझे समझ नहीं आता कि Lit ज़्यादा popular क्यों नहीं है
इसकी core functionality हैरानी की बात है कि काफी simple है, और ज़्यादातर platform APIs पर निर्भर करती है
इसलिए कोई भी इसे खुद implement कर सकता है, और मुझे लगता है कि यही simplicity इसकी बड़ी value है
संदर्भ के लिए, मेरा alternative implementation यह है: https://github.com/ruphin/lite-html
इसे CDN से सीधे लोड करके बिना build step के experiment करना भी इसकी बड़ी ताकत है
यह दूसरे frameworks की तरह भारी नहीं है, और बस Vanilla JS + HTML लिखने जैसा महसूस होता है, इसलिए cognitive load बहुत कम है
Shadow DOM मूल रूप से component के अंदर के DOM को अलग करने वाला एक private tree है
इससे slot का कॉन्सेप्ट संभव होता है, और सच में composable components बनाए जा सकते हैं
समस्या यह है कि style encapsulation मौजूदा systems के साथ integrate करते समय बड़ा अवरोध बन जाती है
इसलिए मैंने Open Styleable Shadow Roots नाम का एक proposal दिया है, जिसमें बाहरी styles अंदर तक flow कर सकें, जबकि slots बने रहें. अभी browser vendors को मनाने की कोशिश चल रही है
इस बारे में मेरा एक लेख भी है: https://medium.com/gitconnected/getting-started-with-web-com...
कभी-कभी सोचता हूँ कि यह और ज़्यादा widely used क्यों नहीं है
यह पहले Backbone.js पर आधारित था, और हमने इसे lit-html → lit-element → lit के क्रम में धीरे-धीरे replace किया
अब यह
<converse-root />नाम के web component के रूप में दिया जाता है, इसलिए React जैसे दूसरे frameworks के साथ भी अच्छी तरह integrate हो जाता हैGitHub: https://github.com/conversejs/converse.js / demo: https://chat.conversejs.org/
अगर server पर JSX जैसे template system का इस्तेमाल हो, तो अनुभव काफी अच्छा रहता है, और client side पर बस JS होने से upgrade की चिंता भी नहीं रहती
लेकिन native APIs बहुत low-level हैं, इसलिए DX कमज़ोर है, और Lit उसके ऊपर declarative reactivity जोड़ देता है
जिन चीज़ों को खुद implement करना झंझट होता, उन्हें यह साफ तरीके से संभाल देता है
htmltemplate literal और JSX के बीच कोई बहुत बड़ा अंतर महसूस नहीं हुआबल्कि JSX में compile step चाहिए, इसलिए वह और झंझट वाला लगता है
शुरू में मैंने dependency-free environment में खुद Web Components बनाए थे, लेकिन बाद में LitElement पर आने के बाद चीज़ें काफी आसान हो गईं
हालांकि Shadow DOM default है, लेकिन कई बार वह उल्टा और समस्याएँ पैदा करता है, इसलिए अब मैं Shadow DOM के बिना LitElement इस्तेमाल करता हूँ
इसकी सबसे बड़ी ताकत यह है कि यह एक stable foundation पर खड़ा है
native Web Components सभी browsers में स्थिर रूप से supported हैं, इसलिए framework बदलने के जोखिम के बिना development पर ध्यान दिया जा सकता है
काश ज़्यादा teams इसे आज़माएँ
वैसे Lit पर HTTP 203 वीडियो भी recommend करूँगा
Angular बहुत भारी है, और React ऐसा लगता है जैसे पुराने browsers की सीमाओं को ध्यान में रखकर बनाया गया था, और अब बस inertia की वजह से बचा हुआ है
Angular के boilerplate या React hooks की complexity के मुकाबले यह कहीं ज़्यादा intuitive है
बस अफसोस है कि इसे popularity नहीं मिली
असल में मुझे लगता है कि
+ Web Componentsका combination ही काफी हैलेकिन सोच रहा हूँ कि Vue की जगह Lit में उन्हें दोबारा बनाने का क्या फायदा होगा
Vue 3 का ref/reactive state management शक्तिशाली है, और DOM पर निर्भर हुए बिना test भी किया जा सकता है
Lit की reactivity widget स्तर की है, इसलिए update triggers आपको खुद manage करने पड़ते हैं
Vue का lifecycle simple है, जबकि Lit में कई callbacks पर ध्यान देना पड़ता है, इसलिए bugs आना आसान है
अगर कोई खास वजह नहीं है, तो feature development पर ध्यान देना बेहतर है, क्योंकि tech stack बदलने से users पर लगभग कोई असर नहीं पड़ता
Vue एक framework है, इसलिए features ज़्यादा हैं; Lit native APIs के ज़्यादा करीब implement होता है
Vue में build चाहिए, लेकिन Lit में runtime loading संभव है
Vue दूसरे targets पर भी compile हो सकता है, लेकिन Lit सिर्फ Web Components के लिए है, इसलिए ज़्यादा साफ-सुथरा है
आख़िरकार सबसे महत्वपूर्ण बात यही है कि team जिस technology से ज़्यादा परिचित हो, वही इस्तेमाल करे
consumers को अंदरूनी implementation से मतलब नहीं होता; उनके लिए size और API ही मायने रखते हैं
वैसे भी दूसरे लोग अपने environment के हिसाब से adapter बनाकर इस्तेमाल करेंगे