वेब कॉम्पोनेंट्स ठीक हैं
(nolanlawson.com)- वेब कॉम्पोनेंट्स पर बहस सर्वोच्च प्रदर्शन और प्लेटफ़ॉर्म स्टैंडर्ड में से सिर्फ एक चुनने का सवाल नहीं है, और यह मान लेना भी अतिशयोक्ति है कि उन्हें सभी JavaScript frameworks की जगह लेनी चाहिए
- Custom Elements DOM को interface की तरह इस्तेमाल करते हैं, इसलिए overhead होता है, लेकिन वास्तविक products में performance के साथ maintainability·security·usability·accessibility को भी साथ में परखना चाहिए
- frameworks के लिए web components support की लागत कुछ सरल checks से संभाली जा सकती है, और सिर्फ standard feature होने से यह ज़रूरी नहीं हो जाता कि हर framework उसे अपनाए
- web components में server-side rendering (SSR), accessibility, और कुछ interoperability में कमजोरियाँ हैं, इसलिए React·Solid·Svelte जैसे विकल्प कई स्थितियों में अब भी अधिक उपयुक्त हैं
- Salesforce जैसे environments में, जहाँ client-rendered apps, component marketplace, और लंबी अवधि की backward compatibility महत्वपूर्ण हो, web components एक व्यावहारिक विकल्प बन सकते हैं
बहस की शुरुआत और लेखक की स्थिति
- हाल की बहस Ryan Carniato के “Web Components Are Not the Future” और Cory LaViska के “Web Components Are Not the Future — They’re the Present” से आगे बढ़ी
- मुद्दा किसी विरोधी खेमे पर हमला करना नहीं, बल्कि यह देखना है कि अलग-अलग सीमाओं के साथ काम करने वाले developers क्या कोई साझा आधार ढूँढ सकते हैं
- Ryan Carniato को Solid और
js-framework-benchmarkमें दिखने वाले performance तथा framework design work के लिए बहुत सम्मान दिया जाता है - web components का भी framework implementation, component creation, Web Components Community Group, Accessibility Object Model group, और shadow DOM·custom elements·accessibility work से जुड़ा वास्तविक उपयोग-क्षेत्र है
प्रदर्शन: DOM की लागत सच है, पर पूरी कहानी नहीं
- web components की बुनियादी कमजोरी यह है कि वे Custom Elements पर आधारित हैं
- हर interface को DOM के रास्ते से गुजरना पड़ता है, इसलिए performance overhead आता है
- अगर लक्ष्य पूरी तरह सबसे तेज framework बनाना है, तो DOM nodes को जितना हो सके कम करना चाहिए, और इस पैमाने पर web components कमजोर पड़ते हैं
- लेकिन performance software development का एकमात्र मानदंड नहीं है
- maintainability, security, usability, और accessibility को भी साथ में देखना चाहिए
aria-*attributes render न करने से DOM rendering थोड़ी तेज हो सकती है, लेकिन accessible interface के लिए वे ज़रूरी हो सकते हैंforloop का.forEach()से तेज होना, याvarकाconst/letसे तेज होना जैसी micro-optimizations आम तौर पर इतने मूल्यवान नहीं होतीं कि उनके लिए समझौता किया जाए
- DOM nodes को कम से कम रखना virtualization का मुख्य विचार है
- सबसे तेज विकल्प न होने पर भी कई बार अधिक सरल approach पर्याप्त होती है
components as elementsभी optimal नहीं है, लेकिन हर बार optimal होना ज़रूरी नहीं
- अलग-अलग frameworks से बने custom elements को साथ इस्तेमाल करना भी व्यावहारिक काम में अर्थपूर्ण है
- हो सकता है Framework A से Framework B में धीरे-धीरे migrate करना हो
- या कई micro frontends को जोड़ना पड़ता हो
- यह सबसे तेज interface नहीं होगा, लेकिन ज़रूरी trade-off हो सकता है
- वास्तविक web performance में layout thrashing, network waterfall, और अनावश्यक re-rendering जैसे कम लागत वाले सुधार बिंदु अधिक आम हैं
js-framework-benchmarkजैसी प्रतिस्पर्धाएँ framework authors के लिए रोचक हैं, लेकिन सामान्य product स्थितियों में हमेशा निर्णायक नहीं होतीं- अगर संसाधन-सीमित environment में हर millisecond महत्वपूर्ण है, तो web components को छोड़ देना भी उचित निर्णय हो सकता है
framework support की लागत और पसंद की स्वतंत्रता
- यह दावा कि web components support framework authors के लिए अत्यधिक महँगा पड़ता है, लेखक को स्वीकार्य नहीं है
- props और attributes की पहचान
prop in elementcheck से की जा सकती है - web components को output करना कष्टदायक हो सकता है, लेकिन यह ऐसा काम नहीं जिसे हर framework को अनिवार्य रूप से करना ही पड़े
- Vue 2 ने अलग web component wrapper library का उपयोग किया, और Remount React टीम की भागीदारी के बिना भी मौजूद है
- props और attributes की पहचान
- 2011 के बाद web platform में जुड़ी सुविधाओं को नज़रअंदाज़ करके भी frameworks शानदार बनाए जा सकते हैं
- jQuery v1 अब भी कई websites पर काम करता है
- browser performance teams पुराने web developer patterns को optimize करती रहती हैं, इसलिए पुराना code नए browsers में और तेज चल सकता है
- आधुनिक web platform features अपनाने के फैसले के साथ नए विचार-विमर्श भी आते हैं
Symbol,Proxy, Promises जैसी सुविधाएँ भी इसी श्रेणी में आती हैं- web की backward compatibility की वजह से लिखा गया code 10 साल बाद भी चलता रह सकता है
- ऐसे frameworks भी पूरी तरह उचित हैं जिन्हें web components में रुचि नहीं है या जो उन्हें support नहीं करना चाहते
- पूरा UI web components से बनाया जा सकता है
- HTML web components को आंशिक रूप से मिलाया जा सकता है
- या उन्हें बिल्कुल न इस्तेमाल करने का विकल्प भी है
- “no web components” framework भी अपने प्रशंसक पा सकता है
standard एक reference point है, बाध्यता नहीं
- जब कोई feature standard बन जाता है, तो developers उसे तुलना के एक मूल आधार के रूप में देखने लगते हैं
- component author को तय करना पड़ता है कि उसका
<slot>native<slot>की तरह काम करना चाहिए या नहीं IntersectionObserverया<img loading="lazy">का उपयोग करना है, या अपनी abstraction बनानी है, यह भी एक चुनाव है
- component author को तय करना पड़ता है कि उसका
- standards साझा reference point और shared vocabulary देते हैं
- वे अलग-अलग approaches की तुलना और विरोधाभास समझने का आधार बनाते हैं
- लेकिन सिर्फ standard होने से किसी चीज़ का इस्तेमाल अनिवार्य नहीं हो जाता
- web पर ऐसे features और पुराने APIs साथ-साथ मौजूद हैं जिन्हें इस्तेमाल करना आवश्यक नहीं
document.domain,with,<frame>जैसे deprecated APIs अब भी supported हैं- web platform की सुविधाओं को चुना भी जा सकता है और छोड़ा भी जा सकता है
कहाँ web components सही हैं और कहाँ नहीं
- web components बहुत-सी चीज़ें अच्छी तरह करते हैं, लेकिन वे सभी JavaScript frameworks को बदल देने वाला औज़ार नहीं हैं
- उनकी कमजोरियों में server-side rendering (SSR), accessibility, और कुछ interoperability शामिल हैं
- अब भी कई स्थितियाँ ऐसी हैं जहाँ React, Solid, Svelte जैसे frameworks बेहतर चमकते हैं
- “web components भविष्य नहीं हैं” जैसी बात कुछ developers या projects के लिए सही हो सकती है
- इस बहस की जड़ में यह तथ्य है कि अलग-अलग लोग अलग-अलग सीमाओं के भीतर अलग चीज़ें बना रहे हैं
Salesforce का उदाहरण और व्यावहारिक निर्णय
- Salesforce दिखाता है कि किन environments में web components अच्छा विकल्प हो सकते हैं
- यह client-rendered apps बनाता है
- इसका अपना component marketplace है
- इसे कड़ी backward compatibility guarantee की आवश्यकता है
- support अवधि कई वर्षों, और कुछ मामलों में दशकों में मापी जाती है
- अगर ये शर्तें लागू नहीं होतीं, तो पूरे UI को web components, shadow DOM, और उससे जुड़ी पूरी संरचना में बनाना आवश्यक नहीं हो सकता
- web platform पर WebGL, Wasm, Service Workers जैसी विविध तकनीकों से बने games, art projects, और enterprise SaaS apps साथ-साथ मौजूद हैं
- platform में नई सुविधाएँ जुड़ने से रचनात्मकता सीमित नहीं होती, बल्कि ऐसे अभिव्यक्ति-मार्ग खुलते हैं जिनकी पहले कल्पना भी नहीं की गई थी
- साथ पढ़ने लायक लेखों में Lea Verou का लेख और Baldur Bjarnason का लेख भी शामिल हैं
1 टिप्पणियां
Hacker News की राय
संदर्भित लेख “Web Components Are Not the Future” को समझने की कोशिश की, लेकिन बहुत ज़्यादा भरोसेमंद तर्क नहीं मिले
आज के frontend framework की हालत गड़बड़ है, और मैं ऐसे जटिल framework या ऐसी magic (
useState,createSignalआदि) सीखना नहीं चाहता जिसे docs पढ़े बिना समझा न जा सकेWeb Components से शुरुआत करने पर यह सहज लगता है, और Shadow DOM isolation जैसी क्षमताएं भी मिलती हैं जो कहीं और नहीं हैं
React युग से बचाकर रखने लायक चीज़ सिर्फ JSX है, ऐसा मानते हुए Web Components को JSX के साथ इस्तेमाल करने वाली एक library बनाई: https://webjsx.org
क्या framework खुद सीखना नहीं चाहते, या कुछ ऐसा चाहते हैं जो सीखने की ज़रूरत न पड़े इतना magic जैसा लगे, या docs पढ़ना चाहते हैं या नहीं—यह अस्पष्ट है
मैंने मुख्यतः Vue इस्तेमाल किया है, और SPA ecosystem जटिल है, लेकिन जटिल state वाले client app को manage करने के लिए और कौन-सा system संभव है, यह भी ठीक से नहीं पता
jQuery का basic pattern element चुनकर उसे बदलने वाला side-effect centric तरीका है, जबकि React या Vue.js आपको ऐसे components बनाने देते हैं जिनमें UI state data से तय होती है
Data बदलने पर कम-से-कम DOM बदलावों से update होता है, और यह तरीका location के हिसाब से UI widget को कहीं ज़्यादा readable और maintainable बनाता है
आज की websites और web-based desktop apps 20 साल पहले की तुलना में कहीं ज़्यादा जटिल हैं, इसलिए अगर सिर्फ simple UI नहीं बनाना है तो state management के लिहाज़ से innovation अहम है
useStateअंदर से कैसे काम करता है, और इसे apply करने का तरीका काफ़ी intuitive हैइसके उलट, पेश की गई library शुरुआत से ही ज़्यादा जटिल mental model मांगती हुई लगती है
framework की details को गहराई से समझना ideal तो है, लेकिन React इस मायने में सफल रहा है कि internal model लगभग न जानते हुए भी काफ़ी sophisticated apps बनाए जा सकते हैं
शायद इसलिए भी कि मैं C# beta के समय से और HTML/JS/CSS के शुरुआती दौर से developer रहा हूं, लेकिन यह जल्दी समझ में आ गया
पुराने और जटिल core infrastructure management portal को replace करते समय Angular चुना, और यह stable, fast और अच्छा दिखने वाला था; सभी संतुष्ट थे
“steep learning curve” मुख्यतः उन developers से आता दिखता है जो सिर्फ JavaScript और थोड़ा-सा React जानकर industry में आए हैं; ज़्यादा experience हो तो इसे तुरंत सीखा जा सकता है
useStateके अंदरूनी हिस्से को लेकर उत्सुक है, तो कुछ सेकंड में logical और सही जवाब तक पहुंच सकता हैयह complex या magic नहीं है, और React hook जैसा minimal implementation कुछ सौ lines में संभव है
basic
useStateऔरrunFunctionComponentimplementation university computer science के तीसरे semester के ज़्यादातर assignments से आसान हैअगर यही magic का standard है, तो हमारे आसपास breakfast करते-करते नए Eldritch Invocation बना देने वाले level 20 Warlocks भरे पड़े हैं
मुझे लगता है इस debate में लोगों के एक-दूसरे से चूकने की एक वजह यह है कि वे अलग-अलग चीज़ों को optimize कर रहे हैं
VC-funded startup में अगर तेज़ी से आगे बढ़ते हुए ऐसा core product बनाना है जिसे लगातार maintain किया जाएगा, तो framework सही बैठ सकता है
लेकिन academic lab में पहले से बने app को maintain करने के लिए बहुत पैसा नहीं होता, और grant नए project पर जाने के बाद भी उसे चलता रहना चाहिए
एक Vue app को Web Components में फिर से लिखने का काम लगभग पूरा कर लिया है, क्योंकि dependencies सड़ चुकी थीं और update करना नामुमकिन था
पहले dependency hell ठीक करने में समय लगता था और आगे भी यही होता, लेकिन Web Components को experiment करके देखा तो तुरंत अच्छा लगा और switch कर लिया
dependencies करीब 15 से घटकर करीब 1 (d3js) रह गईं, और कोई पछतावा नहीं
पुराना app https://bam.iobio.io/, नया app https://bam2.iobio.io/
कोई भी framework को हमेशा latest version पर upgrade करने के लिए मजबूर नहीं करता, इसलिए जिस Vue version का इस्तेमाल हो रहा था उसी पर रहना भी संभव था
कोई खास वजह न हो तो अंत तक वही version इस्तेमाल करना भी ठीक हो सकता था
इसका मतलब यह नहीं कि उस use case में Vue की ज़रूरत नहीं थी या dependencies हटाना गलत choice था, लेकिन अगर Vue पसंद था तो latest version पर बने रहने की कोई मजबूरी नहीं दिखती
सोच रहा हूं कि Vue को extra dependencies की ज़रूरत build system की वजह से पड़ती है या नहीं
इसलिए समझ नहीं आता कि VC ecosystem framework के बिना क्यों नहीं चल सकता
Svelte में Custom Elements API के ज़रिए Web Components generate करने का support है, यह बात अच्छी लगती है
Svelte सामान्य JS/HTML/CSS में compile होता है, इसलिए किसी भी framework या vanilla JS में काम करने वाले reusable components बनाना natural है: https://svelte.dev/docs/custom-elements-api
Web Components पर चर्चा को कई सालों से follow कर रहा हूँ, लेकिन एक full-stack developer के तौर पर यह अभी तक ठीक से समझ नहीं आया कि यह मेरी ज़िंदगी बेहतर बनाने के लिए क्या कर सकता है
ये examples ज़्यादातर data को HTML में template के रूप में डालने भर के थे, और वह काम तो पहले से ही handlebars से किया जा सकता है
क्या मैं कुछ miss कर रहा हूँ
अगर आप HTML को document की तरह इस्तेमाल करते हैं, तो Web Components से ज़्यादा शानदार real-time interaction features जोड़े जा सकते हैं
WebSocket से जुड़ने वाला terminal emulator, date picker, custom form elements, maps, data tables, tab widgets, और पुराने jquery-ui द्वारा दिए जाने वाले custom components इसके examples हैं
Web Components के बिना भी यह संभव है, लेकिन custom component के रूप में बनाने पर HTML कहीं ज़्यादा साफ़ और document-जैसा बना रहता है
एक consistent Web Components library हो तो अच्छा होगा, और HTMX व server-sent events से भी काफी अच्छा real-time chat संभव लगता है
HTML, CSS, JS सबको browser बिना किसी अलग hack के isolate कर देता है
Web Component बनाकर JS, HTML, CSS API को variables के आधार पर स्पष्ट रूप से define करने के बाद उसे किसी भी environment में डालें तो वह टूटता नहीं, या जटिल CSS namespace और framework dependency की भूलभुलैया बनाने की ज़रूरत नहीं पड़ती—यह अच्छी बात है
उदाहरण के लिए, table को wrap करने वाले Web Component से filtering या drag-and-drop sorting जैसी functionality जोड़ी जा सकती है, और JS बंद हो या load fail हो जाए तो भी user को basic table और content मिलता है
पहले यह frontend framework की white screen से कहीं बेहतर था, लेकिन अब server-side rendering व्यापक रूप से उपलब्ध हो गई है, इसलिए फायदा कुछ कम हो गया है
style encapsulation भी अच्छा है, लेकिन आजकल headless UI libraries और frameworks के scoped styles आम हो गए हैं, इसलिए 10 साल पहले जितना ज़रूरी नहीं लगता
हालांकि slots इस्तेमाल करने के लिए Shadow DOM चुनना पड़ता है, इसलिए अपने reusable components बनाते समय page में एक stylesheet डालकर styling न कर पाना irritate करता है
अगर demo manual DOM adjustment की 200 lines दिखाए, तो Web Components को future कहना मुश्किल है
बस यही है, और ज़्यादातर दूसरे use cases के लिए यह काफी खराब है
साथ ही UI component को 7 versions में बनाए बिना सभी frameworks में काम करने लायक publish किया जा सकता है
Web Components और Shadow DOM का सबसे खराब हिस्सा यह है कि वे browser extensions को ठीक से काम न करने, या बिल्कुल काम न कर पाने की स्थिति में डाल सकते हैं
browser vendors भी इस स्थिति को ठीक करने की जल्दी में नहीं हैं
Web Components की सबसे बड़ी “गलतियों” में से एक, मेरे हिसाब से, यह है कि लोगों के दिमाग में इसे Shadow DOM के साथ जोड़ दिया गया
app development में live DOM पर टिके रहें तो Web Components बहुत हल्का और आसान विकल्प बन जाता है
bootstrap, tailwind जैसे पसंदीदा CSS tools इस्तेमाल करते रहते हुए भी लगभग बिना cost के शानदार functional encapsulation मिल सकता है, और renderer के तौर पर lit-html जैसी चीज़ इस्तेमाल करें तो यह खास तौर पर अच्छा है
teams को native Web Components पर काम करना आम तौर पर fresh लगा, और framework दुनिया से आए developers ने लगभग एक हफ्ते के adjustment के बाद वापस जाना नहीं चाहा
simple class properties और
set()में render function को manually call करने भर से framework की झंझट के बिना reactivity के फायदे मिल जाते हैंसमस्या यह है कि “easy mode” से शुरू करने का तरीका दिखाने वाले resources बहुत कम हैं
ज़्यादातर beginner resources app developers के बजाय library authors के लिए बने Shadow DOM, CSS parts जैसी दर्दनाक technologies में सीधे धकेल देते हैं
लगता है Web Components से ज़िंदगी आसान बनाने वाली “The Good Parts” जैसी guide लिखनी चाहिए
alternative के तौर पर “HTML web components” हैं, जो सिर्फ live DOM इस्तेमाल करते हैं, server-side rendering-first हैं और “jQuery seasoning” के replacement के लिए अच्छे हैं: https://adactio.com/journal/20618
और “Shadow gristle” भी है, जो Shadow DOM को जितना हो सके उतना कम इस्तेमाल करता है, और styling या composition चाहिए तो उसे live DOM में रखता है: https://glazkov.com/2023/03/02/shadow-gristle/
यह technology इस्तेमाल करने के तरीके के हिसाब से आशीर्वाद और अभिशाप दोनों लगती है, इसलिए इससे जुड़े resources और comments इकट्ठा कर रहा हूँ
सबसे अच्छी बात यह थी कि हर दूसरे हफ्ते dependency hell में नहीं फँसना पड़ता था
interoperability यूज़र के नज़रिए से सबसे बड़ा फ़ायदा है, लेकिन लगता है कि इसके बदले हर इस्तेमाल किए गए component के साथ अनावश्यक runtime आ सकता है, जिससे performance cost पैदा होती है—इस बात को कम आंका जा रहा है
Web Components के साथ Lit जैसे framework का इस्तेमाल recommended तरीका है, और समय के साथ नए framework आते हैं और components पुराने versions से बंध जाते हैं, तो यह cost जमा होती जाती है
एक ही page पर कई duplicate libraries रखने वाली दिशा किसी को भी recommend नहीं करना चाहूंगा, और अगर यह best practice में शामिल है तो लंबी अवधि में अच्छा नहीं है
Web Components समर्थकों के लेख, social media और videos मैंने कई साल देखे हैं, और मुझे ही उनका target user होना चाहिए, लेकिन interoperability tax के ऊपर मुख्यधारा frameworks में न मिलने वाली कमियों से यह भरा है
हर framework ecosystem के अंदर interoperability अच्छी तरह काम करती है, और developers को interoperability खोजने के लिए प्रेरित करने वाली वही dynamics उन्हें कुछ मुख्यधारा frameworks के आसपास इकट्ठा कर देती है
मुझे लगता है Web Components तकनीकी रूप से पीछे रह जाते हैं, और 2010 के शुरुआती दशक के design के लिए web platform में बहुत complexity जोड़ते हैं: https://x.com/Rich_Harris/status/1840116730716119356
Svelte जैसे छोटे runtime वाले framework भी बहुत हैं, और 100 को एक page पर डालने की बात नहीं है, लेकिन 5–6 तक ठीक लगते हैं
इसका मतलब यह नहीं कि यह ideal है, लेकिन gradual migration या micro frontends में मदद कर सकता है
संदर्भ के लिए, React 17 ने भी एक ही page पर कई React versions रखने की क्षमता जोड़ी थी: https://nolanlawson.com/2021/08/01/why-its-okay-for-web-components-to-use-frameworks/, https://bundlephobia.com/package/svelte@4.2.19, https://legacy.reactjs.org/blog/2020/10/20/react-v17.html
React और react-dom मिलाकर 100KB से ज़्यादा हैं, और Svelte व Lit single-digit KB में हैं
लोग रोज़ बिना सोचे-समझे जितना bloat इस्तेमाल करते हैं, उसके करीब पहुँचने के लिए काफ़ी सारे frameworks डालने पड़ेंगे
अब तक लगातार दिखे संकेत अच्छे नहीं हैं, और वह community X पर है; Web Components उनकी समस्याएँ हल नहीं करते और best-case में भी अच्छे से इस्तेमाल नहीं होते
उम्मीद है वे मनाने में सफल हों, लेकिन वे आम तौर पर कहते हैं कि Web Components failed रहे और कुल मिलाकर web के लिए खराब थे
ज़्यादातर runtimes काफ़ी छोटे होते हैं, और दो runtimes साथ चलने से performance overhead बड़ा नहीं हो जाता
सभी modern web frameworks reactive हैं, इसलिए respond करने को कुछ न हो तो वे कुछ नहीं करते
अगर page का एक हिस्सा React से, दूसरा Lit से, और तीसरा Svelte से बना हो, तो user experience या battery consumption किसी single-framework page से स्पष्ट रूप से खराब क्यों होगा, यह समझ नहीं आता
जिस tweet को quote किया गया है वह इस बारे में है कि Web Components “framework बनाने के लिए उपयोगी primitive elements” हैं या नहीं, और जिन्हें इन्हें सच में इस्तेमाल करने का experience है वे fans भी आम तौर पर ऐसा नहीं कहेंगे
Web Components एक distribution mechanism हैं, और अगर alternative सिर्फ़ यही है कि वही library React, Preact, Svelte, Solid, Vue और vanilla JS के लिए 7 बार बनाई जाए, तो वह बेहद खराब है
मुझे Web Components पसंद हैं, और मैं optimistic हूँ कि ये हमें हमारे खुद बनाए हुए मौजूदा frontend hell से बाहर निकाल सकते हैं
हाल ही में frontend के भविष्य पर एक छोटी presentation दी थी, और लगा कि दूसरे लोग भी निकलने का रास्ता उम्मीद कर रहे हैं
DB GUI के लिए data table बनाया, और लाखों rows load करने पर भी scrolling बहुत smooth है
Web Component library भी जल्द release करने वाला हूँ; अभी शुरुआती और rough है, लेकिन अच्छा होगा अगर ज़्यादा लोग देखें: www.astra-ui.com
छोटे screens के लिए responsive design को ध्यान में रखते हुए sidebar को reposition करना, और body पर width के बजाय max-width रखना बेहतर होगा
homepage के नीचे वाला “explore components” button कहीं भी link होता नहीं दिखता
कहा गया है “अच्छी तरह structured और accessible component implementations से सीखें,” लेकिन docs में implementation link नहीं मिला
कहा गया है “manage या update करने के लिए कोई dependency नहीं,” लेकिन astra-ui खुद dependency नहीं है क्या, ऐसा लगता है; और changelog भी है: https://www.astra-ui.com/changes/
यह भी कहा गया है कि “code और styling पर पूरा control” है, लेकिन library द्वारा दी गई implementation पर निर्भर रहते हुए पूरा control कैसे संभव है, यह समझ नहीं आता
उत्सुकता है कि इस library को public करने का फैसला क्यों लिया। internal software को open source करना तब उपयोगी होता है जब company का कोई खास goal हो, लेकिन आम तौर पर यह बिना reward वाला time sink बनना आसान है
component libraries को ecosystem adoption के लिए लड़ना पड़ता है; वरना audience न होने से public करने की वजह कम रह जाती है
यह शानदार समाधान जैसा दिखता है
कुछ महीने पहले नई नौकरी में मुझे लगभग 2.5 लाख लाइनों वाला JS codebase विरासत में मिला
एक विशाल class और कुछ subclasses ही सब कुछ कर रही थीं, और एक file तो 30 हजार लाइनों की थी
कोई framework नहीं था, कोई reactivity नहीं थी, इसलिए button click करने पर event listener के जरिए screen की हर चीज़ को manually update करना पड़ता था
code ऐसा था जैसे किसी ने सिर्फ़ एक basic JavaScript किताब लेकर मठ की कोठरी में कई साल बंद रहकर लिखा हो
चूँकि काम धीरे-धीरे करना था, इसलिए मैंने Web Components के साथ refactoring शुरू की, इससे बहुत मदद मिली और अब तक 50 हजार lines कम हो चुकी हैं
हालांकि असली मकसद rewrite करने से पहले यह सब सीखना था कि मौजूदा code करता क्या है
Web Components के साथ दोबारा बनाना उस लक्ष्य को हासिल करने का एक तरीका है, और अच्छी बात यह है कि सब कुछ फेंककर नए सिरे से शुरू नहीं किया गया
हालांकि कुछ हद तक आगे बढ़ने के बाद अगर आप किसी दूसरे project में चले जाएँ, तो जोखिम है कि अगला व्यक्ति आएगा और अपने style में refactoring शुरू कर देगा, जिससे तीन अलग-अलग styles वाला उलझा codebase बन जाएगा
फिर भी यह 2.5 लाख lines को एक साथ दोबारा लिखने से बेहतर है
Web Components में मुझे जो एक बात अच्छी लगी, वह यह है कि कम-से-कम theory में यह JS disabled state में भी काम कर सकता है
progressive enhancement के लिए मैंने कुछ बार ऐसा किया है
कुल मिलाकर Nolan की बात से सहमत हूँ। Web Components में अभी भी rough edges काफी हैं, इसलिए मौजूदा हालत में इसका दुनिया पर छा जाना मुश्किल है, लेकिन कुछ खास use cases में यह काफी अच्छा है
हालांकि यह बात मुझे ठीक से समझ नहीं आती कि यह server-side rendering के साथ अच्छी तरह fit नहीं होता, मैंने तो इसे बिना समस्या किया है
जहाँ तक मैंने देखा है, किसी खास tag पर template register करने के लिए JavaScript की ज़रूरत लगती है: https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots
ReactJS में component या template को server render किया जा सकता है, और मेरे हिसाब से JSX काफी अच्छा template language है
मेरी समझ में Web Components में built-in अच्छा template language नहीं है, इसलिए आपको अपना लाना पड़ता है
मैं ऐसा कोई standard mechanism नहीं जानता जो tag से जुड़े JS component piece को लेकर, JS चलाए बिना आवश्यक HTML render कर सके
अगर भविष्य में server पर 3 अलग-अलग Web Component frameworks render किए जा सकें, वे आपस में compose हों, और cleanly hydrate हों, तो इसे solve हुआ माना जा सकता है: https://nolanlawson.com/2023/08/23/use-web-components-for-what-theyre-good-at/