- केवल HTML, CSS, JavaScript का उपयोग करने वाली मूल वेब डेवलपमेंट तकनीकों का विवरण
- build tools और framework के बिना सिर्फ standard web technologies से sites और applications बनाने के तरीके का परिचय
- web components और आधुनिक CSS features का उपयोग करके structure और styling करने के तरीकों पर चर्चा
- framework की जटिलता और maintenance के बोझ के बिना सरल development environment और दीर्घकालिक लाभों को लक्ष्य बनाता है
- पहले से web standards technologies सीख चुके developers को मुख्य target करने वाला tutorial
Plain Vanilla वेब अवलोकन
वेब डेवलपमेंट में build tools और framework के बिना केवल standard web technologies से sites और applications बनाने की प्रमुख तकनीकों का यह एक अवलोकन है
- editor, browser, web standards का ही उपयोग करने वाले environment का विवरण
- शुरुआती setup और server-side logic के बिना production deployment संभव करने वाली संरचना का परिचय
शामिल विषय
1. कंपोनेंट्स(Components)
- web components का उपयोग करके केवल HTML, JavaScript, CSS से उच्च-स्तरीय building blocks को संयोजित करने का तरीका
- React या Vue जैसे framework component approach का विकल्प प्रस्तुत करने का तरीका
2. स्टाइलिंग(Styling)
- आधुनिक CSS की शक्ति का उपयोग करके CSS Modules, PostCSS, SASS द्वारा दी जाने वाली सुविधाओं का विकल्प बनाने का तरीका
- पारंपरिक CSS से आगे बढ़कर structured और modular styling की अवधारणा प्रदान करता है
3. साइट्स(Sites)
- web components आधारित web projects को व्यवस्थित करने और build tools या server-side के बिना deploy करने का तरीका
- व्यावहारिक और सरल deployment workflow प्रस्तुत करता है
4. एप्लिकेशंस(Applications)
- केवल vanilla techniques से single-page web applications बनाने का तरीका
- routing, state management के तरीकों का विवरण
अनुशंसित पाठक
यह उन developers के लिए है जो पहले से HTML, CSS, JavaScript को कुछ हद तक इस्तेमाल कर सकते हैं
- वेब डेवलपमेंट शुरू करने वालों के लिए Odin Project या MDN जैसे बुनियादी learning paths की सिफारिश की जाती है
vanilla approach क्यों
आधुनिक frameworks तेज़ी से संरचित और शक्तिशाली features प्रदान करते हैं, लेकिन इनके साथ tools और framework की बढ़ती जटिलता तथा लगातार maintenance का बोझ भी आता है
- plain vanilla approach अल्पकालिक सुविधा का कुछ हिस्सा छोड़ने के बदले सादगी और लगभग zero-maintenance जैसे दीर्घकालिक लाभ प्रदान करता है
- आज के browsers का बेहतरीन web standards support इस approach को वास्तव में संभव बनाता है
1 टिप्पणियां
Hacker News राय
अब मैं "vanilla या framework" बहस से आगे बढ़कर इस नज़रिए से सोचता हूँ कि 'क्या इसके लिए सच में वेबसाइट की ज़रूरत है?'
वेब ऐप, खासकर B2B SaaS क्षेत्र में, क्या वास्तव में वेब की ज़रूरत है—इस पर शक करना शुरू करें तो पता चलता है कि browser को छुए बिना भी बिज़नेस को काफ़ी आगे तक ले जाया जा सकता है
वेबसाइट और ऐप बनाने में मैंने जो ज़्यादातर समय लगाया, वह managed UI/UX पर था—यानी admin database fields बदलकर application को customer expectations के मुताबिक चलाए
कई मामलों में, बिज़नेस को सिर्फ config templates (जैसे Excel files) दे देना और नतीजों को सीधे SQL tables में insert/merge करना कहीं ज़्यादा तेज़, आसान और कम फालतू काम वाला होता है
वेब सिर्फ UI/UX का एक ही तरीका देता है। email या plain text files कभी-कभी इससे ज़्यादा flexible होते हैं
खासकर government agencies जैसे खरीदार ठीक से समझे बिना अक्सर ज़्यादा पैसे दे देते हैं
procurement संभालने वालों को क्या चाहिए, इस बारे में ज़्यादा शिक्षा की ज़रूरत है
असल cremation urn stores में cart नहीं होता, तो virtual store में क्यों हो
जब मैंने online specialized woodworking tools खरीदे, तब भी मैंने बस form भरा और invoice के साथ parts पा लिए; चाहूँ तो पहले payment न करूँ, यह भी ठीक था
online और offline, commerce के कई तरह के तरीके होते हैं, और अगर दिलचस्प ढंग से जीने वाले लोगों को ध्यान से देखें तो यह हर जगह दिख जाता है
अगर थोड़ा-बहुत maintenance skill हो, तो Excel template + simple custom script वाला तरीका कहीं ज़्यादा flexible हो जाता है
अगर end users वैसे भी raw data संभालने के स्तर के users हैं, तो यह बहुत प्रभावी है
और आज भी B2B का 99% हिस्सा इसी तरह चलता है
मैं frameworks के ख़िलाफ़ नहीं हूँ। बस मुझे लगता है कि कई बार उनकी ज़रूरत नहीं होती
एक line code लिखने से पहले ही 100KB JS क्यों जोड़ना पड़े, यह मुझे हमेशा अजीब लगा
मैंने अपनी टीम के साथ https://restofworld.org बिना किसी framework के बनाया
survey, outreach और email feedback—सबमें usability और reading experience को लेकर बहुत positive प्रतिक्रिया मिली
बाद में framework इस्तेमाल कर सकते हैं, लेकिन अभी तक plain vanilla JS ही बहुत अच्छा फिट बैठता है
एक तरफ वे लोग हैं जो 30+ लोगों की टीमों में बड़े web apps बनाते हैं, और अगर आप कहें कि framework के बिना बनाया है, तो वे तुरंत बड़े scale की ज़रूरी functionality को लेकर सवाल उठाते हैं
लेकिन जवाब यह होता है कि उन features की ज़रूरत ही नहीं है, क्योंकि यह blog जैसे इस्तेमाल का मामला है, इसलिए शुरू से framework की ज़रूरत नहीं थी
उल्टा, जिन लोगों को बहुत बड़े web app का अनुभव नहीं है, वे सोचते हैं: "लोग frameworks इस्तेमाल ही क्यों करते हैं?"
वेब सच में बहुत तरह के software का मिश्रण है।
इसलिए frameworks पर बात करते समय साफ़ बताना चाहिए कि किस तरह के software की बात हो रही है
इस मामले में, यह एक WordPress blog है
यह WordPress नाम का एक बड़ा framework इस्तेमाल करता है, बस output को statically render कर रहा है
TFA का मतलब है बिना किसी build tool के, सिर्फ modern web standards का इस्तेमाल। यानी सिर्फ editor, browser और web standards
जिन enterprise apps पर मैंने काम किया, उनमें 100KB की चिंता करने की बिल्कुल ज़रूरत नहीं थी
वे ज़्यादातर multi-team द्वारा बनाए गए बड़े apps थे, और React वगैरह इस्तेमाल करते थे
Lob/B2B में initial page load की किसी को परवाह नहीं होती
users हर दिन app इस्तेमाल करते हैं, और ज़्यादातर static assets सीधे browser cache से मिल जाते हैं
अगर Next.js जैसा smart framework हो, तो routes के हिसाब से content immutable chunks में बँटा रहता है
initial render static HTML होता है, इसलिए user को hydration दिखता भी नहीं
लेकिन vanilla vs framework बहस में ऐसे examples हमेशा news/article sites ही होते हैं, जो complex app नहीं हैं, इसलिए मुझे लगता है कि "मैं तो शुरू से framework इस्तेमाल ही नहीं करता"
आख़िरकार असली उदाहरण के लिए ज़्यादा interactive apps चाहिए
आजकल मैं frameworks और consistent patterns का इस्तेमाल करना पसंद करता हूँ, और बाकी dependencies कम से कम रखता हूँ
iPhone पर पीछे जाने पर पूरा page फिर से load होना इतना आम हो गया था कि यही सामान्य लगने लगा था
लेकिन developers मज़े के लिए loading screens, hydrating components, ज़रूरत से ज़्यादा animations और परेशान करने वाले modals पर अटक जाते हैं
और infinite scroll, scrollbar की position से मैं कहाँ हूँ यह समझना मुश्किल बना देता है, इसलिए usability के लिए नुकसानदेह है
इसे बनाने में आपकी भागीदारी काबिल-ए-तारीफ़ है
Mithril जैसे framework में सारी functionality 10KB gzipped में हो सकती है
अगर आप सोचें कि search वाला reactive table, labels/validation/errors वाला ठीक-ठाक form जैसी interactive चीज़ें खुद implement करनी हैं, जबकि Svelte UI library और 25KB overhead के साथ एक tested, well-made solution मिल सकता है, तो फिर खुद क्यों बनाएँ
और WordPress भी एक framework है
framework इस्तेमाल करने से चीज़ें धीमी नहीं हो जातीं। WordPress हो या कुछ और
बहुत ज़्यादा तेज़ है
developer productivity के लिए (कम-से-कम सिद्धांत में)।
असल में, कई बार उतना फ़ायदा नहीं होता
जानना चाहूँगा कि इस approach की कोई गंभीर कमी सामने आई थी या नहीं
मैं लगभग 2,000 users के लिए एक system बना रहा हूँ, और उन्हें reactive UI से बिल्कुल फ़र्क नहीं पड़ता
monolith बनाइए, page refresh की चिंता मत कीजिए, बस काम पूरा होने पर ध्यान दीजिए—यही सबसे अच्छा है
उसकी बड़ी वजह तकनीकी नहीं थी, बल्कि native apps की deployment बहुत महँगी थी
वेब apps की deployment का सस्ता standard देता है, लेकिन UI technology अब भी बहुत कमज़ोर है
पहले X11, Java, Flash जैसी कई आधी-अधूरी कोशिशें हुईं, और उम्मीद है कि कभी web apps बनाना ज़्यादा सहज होगा
https://developer.mozilla.org/en-US/docs/Web/CSS/@view-transition
ज़्यादातर software, 120 साल पुराने mechanical devices से भी ज़्यादा धीमे और कम responsive हैं
कोई npm package लाने की ज़रूरत नहीं
backend express/node पर है, पूरा codebase साथ में है, लेकिन dev में server React के default server से चलता है, और production deploy में अलग तरह से, इसलिए अजीब build/operations setup बन जाता है और dev server की सुविधा (hot reload वगैरह) का फायदा फीका पड़ जाता है
Reddit, X(Twitter) जैसी बड़ी कंपनियों के SPA भी mobile पर बहुत unstable रहे
अगर आपका scale Twitter जैसा नहीं है, या आप API-based platform नहीं बना रहे, तो मुझे नहीं लगता कि SPA पर अड़े रहने की ज़रूरत है
अरबों डॉलर की कंपनियाँ भी इसे ठीक से नहीं बना पाईं—तो यह सोचकर चलना कि मैं उनसे बेहतर कर लूँगा, ख़तरनाक आत्मविश्वास है
सब कुछ React में फाड़कर दोबारा बनाने की ज़रूरत नहीं
मूल लेखक जिन advanced SPA-like features की बात कर रहा है, वे optional हैं
क्या आपने उन लोगों का भी अध्ययन किया जो बीच में छोड़कर चले गए?
मैं ऐसी दुनिया में जीना चाहता हूँ
मैं framework से पहले के दौर से आता हूँ, और तब चीज़ें अभी काफ़ी immature थीं, और सिर्फ jQuery जानने वाले लोग भी बहुत थे
अब मुझे लगता है कि post-query selector frameworks की लागत के मुकाबले उनका लाभ उतना बड़ा नहीं है (testing frameworks अलग बात हैं, वे बहुत अच्छे हैं)
हम React नाम की framework jail में फँस गए हैं, और सारी असफलताएँ spaghetti-जैसी complexity का नतीजा हैं
state machines hardcoding से उलझ जाती हैं, और translated/minified/transpiled output समझना मुश्किल हो जाता है
source maps भी maintenance complexity की एक और layer हैं
मैं मानता हूँ frameworks किसी वजह से बने, लेकिन यह मानना मुश्किल है कि नए engineers के लिए vanilla JS की तुलना में frameworks सीखते जाना आसान है
HTML बस text rendering को थोड़ा आसान बनाने के लिए बना markup था, और HTTP भी कुछ ऐसा ही था
पहले text-to-markup ratio ऊँचा होना चाहिए था, लेकिन अब यह पूरी तरह उलट गया है
फिर भी हमने मान लिया कि पूरा app development इसी पर चढ़ाना भविष्य है, और React के अंदर भी देखें तो दशकों भर की hacks और tricks हैं
पहले यह कुछ ऐसा था जैसे Excel+VB से apps बनाना, या PDF+PostScript के मेल से app बनाने की कोशिश करना—काफ़ी बेतुका
इसी वजह से कई MB JS का इस्तेमाल अब बहुत ज़्यादा लगता है
जब data बदलते ही UI तुरंत प्रतिक्रिया दे, यही सबसे अहम है; अगर इसके लिए manually listeners बनाऊँ, diff updates करूँ, और events cleanup करूँ, तो यह लगभग manual memory management जैसा महसूस होता है
jQuery के ज़माने में ऐसा ही था, और ग़लतियाँ भी बहुत होती थीं
अगर components के आधार पर declarative views के साथ modularization vanilla JS में संभव हो जाए, तो मैं लौटने को तैयार हूँ, लेकिन अभी मुझे यह बिल्कुल व्यावहारिक नहीं लगता
कुछ निर्णायक चीज़ की कमी है
React और Angular, ES2015 से पहले निश्चित ही मायने रखते थे
उसके बाद मैं frontend frameworks के लगातार बदलते रुझानों से थक गया
React के भीतर भी component styles और state management के तरीके बदलते रहते हैं
मैं अभी भी Web Components को लेकर आश्वस्त नहीं हूँ
खासकर @scoped, import {type:css} जैसी हाल की सुविधाओं के बावजूद, मुझे लगता है कि elements को statically render करके फिर modern JS से dynamically update करना ज़्यादा सार्थक है
मैं ज़्यादातर Web Components approaches को लेकर सशंकित हूँ, और मानता हूँ कि React/Svelte जैसे frameworks के बाहर innovation जारी रहना चाहिए
मुझे कभी नहीं लगा कि Web Components मेरे द्वारा चलाए जाने वाले कई sites के लिए उपयोगी हैं
Shadow DOM की बात हर page पर कई बार उठती है, लेकिन ज़्यादातर वे समस्याएँ खुद उसे अपनाने से पैदा होती हैं
मेरे app-specific components के लिए Shadow DOM की ज़रूरत ही नहीं
जानना चाहूँगा कि backend में Web Components के साथ यह कैसे handle किया जाता है
आप अपने tags में अतिरिक्त methods जोड़ सकते हैं, और update logic को component के भीतर encapsulate कर सकते हैं
हल्की libraries या खुद लिखे जा सकने वाले तरीकों की ज़रूरत है
HTMX कुछ मामलों में अच्छा है, लेकिन फिर भी script tag की तरह व्यवहार करता है; URL/method जैसी चीज़ें HTML में साफ़ रहें और hx-target जैसी चीज़ें सिर्फ JS में data- attributes से दी जाएँ, तो काफ़ी है
मैं नहीं चाहता कि HTMX की वे सारी features भी साथ आएँ जिनका मैं इस्तेमाल नहीं करता
मैं Web Components को वैसा विकल्प नहीं मानता जिसे दूसरे frameworks में component कहा जाता है
आप attributes में complex values (Object, Array आदि) नहीं दे सकते, boilerplate बहुत ज़्यादा है, और इसमें reactivity भी नहीं है
मैं signals[1] वाले तरीके से vanilla JS-जैसा coding करता हूँ
हर W3C standard सही जवाब नहीं होता; XHTML की विफलता को याद रखना चाहिए
[1] https://wrnrlr.github.io/prelude/
http://youmightnotneedjs.com
यह approach शायद उन लोगों के लिए अच्छी है जो शौक़ में web pages बनाते हैं
frameworks का उद्देश्य standardization, best practices को design में समाहित करना, और development जल्दी शुरू करवाना है
वेबसाइट में अपने-आप में कोई intrinsic value नहीं होती; असली बात यह है कि उसकी content/utility को कितनी दक्षता से दिखाया जाए और समय पर सही तरह से बनाया जाए
इस मायने में frameworks वर्तमान और भविष्य की लागत कम करते हैं
बड़ी कंपनियों में असल निर्णय अक्सर trends, conventions और लोकप्रिय frameworks को लेकर defensive mindset से प्रभावित होते हैं; बढ़ती complexity से productivity में गिरावट को track नहीं किया जाता, और कई बार ग़लत फ़ैसले भी व्यक्ति/टीम के incentives से मेल खाते हैं
यानी "यह तो rational choice ही होगी" कहकर framework चुनने को सही नहीं ठहराया जा सकता
सिर्फ framework इस्तेमाल कर लेने से best practices अपने-आप लागू नहीं हो जातीं; उल्टा, चीज़ें और bloated, और slow systems में बदल सकती हैं
यह सच में शानदार material है
मेरा मानना है कि अगर आप web बनाते हैं, तो foundational technologies के सिद्धांत समझना और web platform का पूरा लाभ उठाना ज़रूरी है
उसके ऊपर build system/framework इस्तेमाल करना है या नहीं, यह trade-offs समझकर स्वतंत्र रूप से चुना जा सकता है
व्यक्तिगत रूप से मुझे Remix(/React-router v7+) पसंद है, क्योंकि इसकी सोच web standards से मिलती है
यानी कम development में ज़्यादा हासिल किया जा सकता है, जैसे server data changes को सिर्फ HTML form से भी संभव बनाना
और https://every-layout.dev भी recommend करूँगा। इससे सिर्फ browser-native CSS से high-performance, accessible और flexible layouts की कई techniques सीखी जा सकती हैं
मैं खुद 1998 से professional web development में हूँ
पिछले हफ़्ते मैंने पूरी तरह vanilla से एक छोटा project बनाया, और वह बहुत अच्छा चल रहा है
यह Mastodon के लिए long-thread writing web tool है
बनाते समय बार-बार मन में आता रहा, "क्या framework के बिना मैं कुछ ग़लत कर रहा हूँ?"
ऐसा माहौल है कि बाकी सब लोग framework की उम्मीद करते हैं
Splinter, splinter.almonit.club, जिसे देखना हो देख सकता है