Astro वेब की बुनियादों की ओर वापसी है
(websmith.studio)"Astro डेवलपर्स के लिए सबसे बेहतरीन framework है"
- Astro content-केंद्रित websites के लिए अनुकूलित एक नई तरह का web framework है, जो डिफ़ॉल्ट रूप से Zero JavaScript नीति, शानदार performance, और आसान development experience प्रदान करता है
- Island Architecture नाम के एक अनोखे तरीके से यह केवल ज़रूरी हिस्सों पर JavaScript लागू करता है, जबकि बाकी को तेज़ static HTML के रूप में संभालता है
- Astro साइटें पारंपरिक React-आधारित सेटअप की तुलना में 40% से अधिक तेज़ loading speed दिखाती हैं, जिससे SEO, user experience, conversion rate जैसे व्यावहारिक फ़ायदे मिलते हैं
- दूसरे frameworks से अलग, data logic और frontend components स्पष्ट रूप से अलग रहते हैं, और React·Vue जैसे कई frameworks के साथ मिलाकर इस्तेमाल किए जा सकते हैं
- लेकिन SPA, complex state management, या large-scale routing की ज़रूरत होने पर Next.js जैसे पारंपरिक frameworks अधिक उपयुक्त हो सकते हैं
Astro क्या है
- Astro एक 2021 में सामने आया web framework है, जिसे जटिल apps के लिए बने मौजूदा JS frameworks से अलग content-केंद्रित sites पर फ़ोकस करके डिज़ाइन किया गया है
- इसकी मूल सोच "content first, server first, और डिफ़ॉल्ट में Zero JavaScript" है, और इसका tooling भी सहज व आसान है
Island Architecture
- Astro "Island Architecture" नाम की अवधारणा लाता है, जिसमें पूरे page पर नहीं बल्कि केवल ज़रूरी हिस्सों पर JavaScript लागू की जाती है
- ब्लॉग पोस्ट जैसी pages, जिनमें ज़्यादातर text होता है, केवल HTML में render होती हैं, और comments या carousel जैसे interaction वाले हिस्सों के लिए ही JS load होता है
- इसी वजह से pages बहुत तेज़ और हल्की रहती हैं
वास्तविक performance और प्रभाव
- Astro-आधारित sites पारंपरिक React frameworks की तुलना में 40% से अधिक तेज़ loading दर्ज करती हैं
- ऐसी performance improvements search engine ranking, user satisfaction, और conversion rate जैसे business परिणामों में बदलती हैं
- धीमे devices और low-speed network environments में speed का यह अंतर और भी स्पष्ट महसूस होता है
Developer Experience
- Project setup सरल है, और "Houston" नाम का एक मददगार setup assistant आपको guide करता है
- Astro components में ऐसा logic संभव है जो केवल build time पर चलता है (जैसे data fetching, API calls आदि)
- Complex state management, lifecycle, या hooks की चिंता किए बिना ज़रूरत पड़ने पर ही client-side JS का उपयोग किया जा सकता है
कई frameworks के साथ compatibility
- React, Vue जैसे प्रमुख frameworks को Astro के साथ स्वतंत्र रूप से मिलाकर इस्तेमाल किया जा सकता है
- उदाहरण: admin dashboard React में, data visualization Vue में, और बाकी Astro में बनाया जा सकता है
वे सुविधाएँ जो सच में 'काम करती हैं'
- Markdown को सीधे component की तरह import करके इस्तेमाल किया जा सकता है
- TypeScript, Sass, image optimization, hot module replacement जैसी modern build pipeline support मिलती है
- Static site / SSR / hybrid rendering सभी विकल्प उपलब्ध हैं, इसलिए project की प्रकृति के अनुसार लचीले ढंग से अपनाया जा सकता है
जहाँ Astro सबसे ज़्यादा चमकता है
- Marketing sites, blogs, e-commerce catalogs, portfolios जैसे content-केंद्रित sites में शानदार performance देता है
- ऐसे environments में आदर्श है जहाँ complex client state management की ज़रूरत नहीं होती
Trade-off
- SPA, complex routing, और components के बीच state sharing महत्वपूर्ण होने वाले projects के लिए Next.js जैसे दूसरे frameworks अधिक उपयुक्त हैं
- इसका ecosystem अभी छोटा है, और file-based routing बड़े projects में कुछ सीमित लग सकता है
जल्दी शुरू करने का तरीका
- npm create astro@latest my-site
- ज़रूरत हो तो npx astro add react से framework जोड़ें
- src/pages/ में pages, src/components/ में components जोड़कर development शुरू करें
Astro का महत्व
- हाल के समय में जब JS frameworks लगातार अधिक जटिल होते जा रहे हैं, Astro वेब की बुनियादों (तेज़, accessible, content-केंद्रित experience) की ओर वापसी करता है और साथ ही development convenience भी सुनिश्चित करता है
- "तेज़ site डिफ़ॉल्ट हो, interactivity केवल जहाँ ज़रूरी हो, और अपनी पसंद का framework स्वतंत्र रूप से इस्तेमाल किया जा सके" — इसकी यह design philosophy डेवलपर्स को पसंद आती है
- ब्लॉग से लेकर e-commerce तक, content-केंद्रित projects के लिए Astro की ज़ोरदार सिफ़ारिश की जा सकती है
1 टिप्पणियां
Hacker News राय
पारंपरिक web framework हमेशा पूरे पेज को JavaScript से ‘hydrate’ करते थे, उदाहरण के लिए किसी साधारण blog post में सिर्फ एक interactive widget हो, तब भी पूरा पेज JavaScript से ही चलता था। दूसरी ओर Astro डिफ़ॉल्ट रूप से static HTML इस्तेमाल करता है, और सिर्फ ज़रूरी हिस्सों को ‘JavaScript islands’ की तरह चलने देता है। पहले इस तरीके को ‘progressive enhancement’ या बस ‘web page’ कहा जाता था, और वेबसाइट बनाने का यही मानक था। फिर SPA आए और progressive enhancement का इस्तेमाल धीरे-धीरे कम हो गया। अब इसे ‘JavaScript islands’ कहा जाता है, लेकिन असल में यह पुराने तरीके पर लौटना ही है। रुचि रखने वाले नए web developers को progressive enhancement की अवधारणा ज़रूर देखनी चाहिए
अक्सर ऐसा होता है कि लोग किसी नए tool का feature description सुनकर समझ लेते हैं कि यह तो वही पुरानी चीज़ है, लेकिन Astro की असली value यह है कि यह कई JavaScript frameworks के साथ जुड़कर HTML की अलग-अलग subtrees को अलग से संभाल सकता है। इस दौरान initial state को string के रूप में render किया जाता है और client side पर पहले से लाए गए data से hydration होता है। जब आप React/Svelte/Solid/Vue जैसे frameworks को पेज के सिर्फ कुछ हिस्सों में इस्तेमाल करना चाहते हों और data को server से पहले से लोड करना चाहते हों, तब इसकी असली उपयोगिता दिखती है। हालांकि यह ‘progressive enhancement’ नहीं है। hydration से पहले का HTML सही से काम करे, यह ज़रूरी नहीं है। उदाहरण के लिए
<form>JavaScript के बिना काम न करे, तब भी चलेगा। ऐसे बारीक फ़र्क वही समझ आता है जब कोई निंदक बनने के बजाय जिज्ञासा से देखेपूरी तरह सहमत हूँ। Astro एक शानदार tool है, लेकिन सबसे मुश्किल बात यह थी कि 2010 के बाद शामिल हुए developers ने web के काम करने के तरीके को समझाने के लिए जो तरह-तरह की terminology बनाई है, उसे समझना
यह नया concept नहीं है, लेकिन आज का implementation कहीं ज़्यादा polished लगता है। पहले interactive web PHP और jQuery से बनाते थे, यानी React और SPA आने से पहले का दौर। अब पीछे मुड़कर देखता हूँ तो architecture के लिहाज़ से पुराना तरीका ज़्यादा elegant था, लेकिन उस समय debugging और DX बहुत खराब थे। PHP के साथ frontend debug करने वाले दिनों में वापस नहीं जाना चाहूँगा। SPA का इस्तेमाल अब भी complex dashboard या interactive apps में है। Astro server और client code को एक ही जगह रखने देता है और दोनों के बीच का separation भी साफ़ रहता है, इसलिए data को PHP से parse करके JS तक पहुँचाने की झंझट नहीं रहती, और DX बहुत बेहतर हो जाती है
वह दौर याद है जब इसे AJAX कहा जाता था। लगता है जैसे पूरी धारा ही कहीं खो गई
मुझे लगता है शुरुआती web frameworks ने stateless websites और server rendering को लेकर सचमुच सही दिशा पकड़ी थी
मैं व्यक्तिगत रूप से Astro की ज़ोरदार सिफारिश करता हूँ। शुरू में लगा था कि यह बस "html और css में include feature जोड़ने वाला tool" है, लेकिन अपनी व्यक्तिगत वेबसाइट और Matrix Conference साइट के नवीनीकरण में इसे इस्तेमाल करके देखा तो बिना किसी झंझट के काम करना बहुत सुखद लगा
Astro के मुख्य फायदे:
अगर Astro का मतलब html और css केंद्र में रखना है और ज़रूरत पर ही js जोड़ना है, तो सीधे file directory में .html, .css, .js बनाकर deploy करने पर भी लगभग वैसा ही अनुभव मिलेगा। बल्कि यह dev-time overhead और अनावश्यक bloat के बिना और तेज़ नहीं होगा क्या? साथ ही CSS को inline करना असल performance bottleneck बहुत कम ही रहा है। सैकड़ों websites के अनुभव में CSS शायद ही कभी bottleneck रही, असली समस्या अक्सर network ही होती थी
मेरी बस एक शिकायत थी कि routing जैसे-जैसे जटिल होती गई, abstraction बहुत तेज़ी से बढ़ा और चीज़ें उलझाऊ हो गईं। complexity हमेशा friction लाती है, इसलिए आखिरकार मैंने दूसरा तरीका चुना
अगर आपको "html और css में include feature" चाहिए, तो nginx जैसे सामान्य web server में server-side includes चालू करके इस्तेमाल कर सकते हैं। यह 20 साल से भी ज़्यादा पुराना, स्थिर और लगभग maintenance-free समाधान है। template engine जैसी अतिरिक्त security risk भी नहीं आती, redundancy भी कम रहती है, और backend vulnerabilities की चिंता के बिना सिर्फ pure include किया जा सकता है
20 साल data/backend पर काम करने के बाद frontend project की वजह से फिर लौटा। React के साथ काफ़ी संघर्ष हुआ, लेकिन Astro+Svelte पर जाने के बाद यह बदलाव बहुत सफल रहा। HTML/CSS केंद्रित होने से code structure अनुमानित और साफ़ रहता है, और जब frontend React background वाले developer को सौंपा, तब भी उसने लगभग तुरंत अपने-आप को ढाल लिया
“पारंपरिक framework” जैसा शब्द SPA/Virtual DOM frameworks के लिए इस्तेमाल होते देख पीढ़ियों का अंतर महसूस होता है। Backbone, jQuery जैसी चीज़ें ही सच में पारंपरिक web frameworks थीं, और वही blog post में बताए गए तरीके से काम करती थीं
“पारंपरिक” आखिरकार इस पर निर्भर करता है कि आप कब पैदा हुए। मेरे लिए पारंपरिक internet मतलब 56k modem, vbulletin forums, GTA:VC mods, IRC वगैरह हैं। और पुरानी पीढ़ी के लिए BBS, जबकि नई पीढ़ी के लिए Discord ही “पारंपरिक” internet होगा। राजनीति में भी कुछ ऐसा ही होता है, जहाँ लोग अक्सर अपने युवावस्था के समय को ही बेहतर मानते हैं
Backbone के बारे में याद है कि वह pure SPA के लिए client MVC की तरफ़ झुका हुआ था
सोचता हूँ कि Astro, NextJS जैसे SSR frameworks SvelteKit की तरह dynamic paths वाली static pages को support क्यों नहीं करते। उदाहरण के लिए /todos/[todoId] जैसा page NextJS में सीधे static bundle में नहीं डाला जा सकता। जबकि SvelteKit 404.html का इस्तेमाल करके, भले तकनीकी रूप से 404 हो, Cloudflare या mobile webview environments में पूरी तरह काम कर लेता है। यह feature खासकर mobile webview bundling में बहुत उपयोगी है
मैं आंशिक रूप से सहमत हूँ, लेकिन इस design के नुकसान भी हैं। /todos/123 जैसे URL को SPA में hard reload करने पर browser असली server से वही file माँगता है। अगर file नहीं है, तो 404 मिलता है। फिर 404 page को client routing के ज़रिए दोबारा data लाकर काम संभालना पड़ता है, जिसके लिए nginx जैसे HTTP server की configuration ज़रूरी होती है। यानी pure static files से यह संभव नहीं है। और HTTP spec के अनुसार browser cache 404 responses को कभी store नहीं करता। इसलिए hard reload या bookmark के मामले में cache का फायदा नहीं मिल पाता। अगर ऐसी configuration बोझ लगे, तो /todo?id=123 जैसे query parameter इस्तेमाल करना बेहतर हो सकता है
हो सकता है मैं कुछ ग़लत समझ रहा हूँ, लेकिन मैंने Next या Astro की static build में dynamic routing/pages लागू किए हैं। CMS के रूप में contentful या storyblok इस्तेमाल करते समय editors को routes और components मनचाहे बनाने दिए, और [...slug] pattern से सारे routes cover किए।
getStaticPathsfunction का इस्तेमाल करके सभी pages पहले से generate किए। ISR/ISP option चालू हो तो build time पर अनजान pages भी dynamic तरीके से prerender हो जाते हैं। Next में इसे dynamic routes और Astro में dynamic pages कहते हैंसंदर्भ: Next dynamic routes, Astro dynamic pages
शायद मैं ठीक से नहीं समझा, लेकिन Astro का
getStaticPathsfunction शायद वही सुविधा देता है जो आप चाहते हैंसंदर्भ
मुझे भी static deployment पसंद है, इसलिए सिर्फ संदर्भ के लिए कह रहा हूँ कि NextJS भी static parameter generation support करता है
मैंने Astro या बाकी frameworks को पूरी तरह नहीं समझा है, लेकिन शायद Astro के server islands आपकी ज़रूरत से मिलते-जुलते हों, इसे देखना चाहिए
frontend पर होने वाली चर्चा खुद ही बहुत उलझी हुई लगती है। लेख में कही गई बात भी आखिरकार “क्या browser को HMI की तरह इस्तेमाल करना है या application runtime की तरह” पर आकर टिकती है। लेकिन ज़्यादातर बहस “यह fresh है”, “यह जल्दी load होता है” जैसे धुँधले दावों तक सीमित रहती है। frameworks को brand की तरह promote करने का माहौल fashion industry जैसा लगता है
frontend framework पर होने वाली बहस समझाने के लिए fashion industry शायद सबसे अच्छा रूपक है। “content-driven”, “server-first” जैसी बातों को शायद ही कभी तकनीकी सख़्ती से परखा जाता है
“जल्दी load होता है” को भ्रम कहना समझ से बाहर है, क्योंकि यह सच में महत्वपूर्ण बात है
मैंने हाल ही में एक medical institution की वेबसाइट Astro में बनाई। पहले Wordpress से बनाता था, लेकिन यह उससे कहीं आसान था, और Netlify जैसी जगहों पर मुफ्त hosting भी मिल जाती है, इसलिए hacking की चिंता भी कम रहती है। मैंने git-based साधारण CMS भी बनाया ताकि client खुद content बदल सके। सच में लगता है web development बहुत आगे आ गया है
क्या यह किसी परिचित के कहने पर किया गया काम था, या medical institution की वेबसाइट बनाने का काम आप कैसे ढूँढते हैं?
ध्यान रहे कि Netlify की bandwidth pricing, Vercel से ज़्यादा है
Astro का सबसे बड़ा फ़ायदा यह है कि React या Vue जैसे दूसरे frameworks पर निर्भर हुए बिना, सिर्फ HTML या Web Component से भी काम किया जा सकता है। लेकिन Astro भी Next, Nuxt की तरह SSR, ISR, SSG, middleware support करता है
फर्क इसकी islands architecture में है, जिसके ज़रिए micro frontend लागू किया जा सकता है
उदाहरण के लिए किसी एक enterprise में अलग-अलग teams checkout, cart, product page जैसी चीज़ें बनाएँ, तब भी उन्हें एक ही page में जोड़ा जा सकता है। rendering का तरीका भी सीधे नियंत्रित किया जा सकता है। global state भी share की जा सकती है, इसलिए हर team स्वतंत्र रूप से end-to-end ज़िम्मेदारी लेकर अपने हिस्से का development/deployment कर सकती है
हालाँकि ऐसी संरचना बड़े projects के लिए ही उपयोगी समाधान है। अगर सभी teams React को अलग-अलग तरीक़े से इस्तेमाल करें तो versions का मिश्रण पैदा होता है, लेकिन Astro जैसी architectural separation उस समस्या को सुलझा सकती है
व्यक्तिगत रूप से पक्का नहीं कह सकता कि यह web को पूरी तरह बदल देगा। मुझे यह Next/Nuxt से framework dependency हटाकर islands architecture जोड़ने जैसा लगता है। फिर भी इसे आज़माने की सलाह दूँगा
अगर आप React/Vue से निकलकर web-component पर जाना चाहते हैं या Next/Nuxt को replace करना चाहते हैं, तो Astro को चरणबद्ध तरीके से अपनाना अच्छा विकल्प हो सकता है
मेरे लिए Astro हर स्थिति में परफेक्ट नहीं है। कुछ मामलों में अगर सिर्फ offline rendering चाहिए, तो JavaScript को ज़बरदस्ती इस्तेमाल करने की कोई वजह नहीं थी
इसकी islands architecture की भी सीमाएँ हैं, और कई बार build output बहुत ज़्यादा inline हो जाता है
ईमानदारी से कहूँ तो Astro का hype शायद Vite की वजह से ज़्यादा है। Vite वाकई कमाल का है
मैं नहीं चाहता कि Next.js को React का standard framework कहकर recommend किया जाए। frontend में ज़्यादा आलोचनात्मक सोच की ज़रूरत है। Remix(React Router v7) या TanStack कहीं बेहतर विकल्प हैं
मैं भी सहमत हूँ। Next.js में क्षमता तो थी, लेकिन Vercel के दखल के बाद मुझे लगता है यह बहुत पीछे गया है। मैं इसे v10 से इस्तेमाल कर रहा हूँ, और v13 के उथल-पुथल वाले दौर से लेकर v15 तक का अनुभव काफ़ी निराशाजनक रहा। React और Next.js दोनों की बदलाव की गति इतनी तेज़ है कि साथ चलना मुश्किल है, और कई बार लगता है बदलाव की ज़रूरत से ज़्यादा बदलाव सिर्फ बदलाव के लिए हो रहे हैं
मैं तो React को ही default framework के रूप में recommend करना बंद करना चाहूँगा। frontend development के लिए HTML/CSS/JS कहीं बेहतर लगते हैं
मुझे लगता है Remix/React Router v7 सही दिशा में है। खासकर अगर Remix preact अपनाए और web standards को केंद्र में रखे, तो मज़बूत websites बनाने का तरीका वापस आ सकता है। हालांकि Remix से RR7 में बदलाव सहज नहीं था, इसलिए project को rewrite करना पड़ा
मुझे लगता है web के बुनियादी सिद्धांत अब भी पूरी तरह मान्य हैं। PHP, Spring, Quarkus, ASP.NET MVC इस्तेमाल करने वाले developers शायद यह महसूस ही न कर पाते हों कि JS framework आधारित web development कितना कठिन हो गया है। fashion-driven industry माहौल के कारण basics की ओर लौटना आसान नहीं लगता