وب مدرن، رابط کاربری و تجربهی وب · فصل ۱ — مرورگر، سرور، رندر و معماری صفحه · 34
Astro، Next.js، React، Vite، Node.js و .NET چه فرقی دارند؟
فرض کنید یک تیم میگوید بین React، Vite، Node.js، Next.js، Astro و .NET باید یکی را انتخاب کند. مشکل این سؤال این است که نامهایی از چند لایه متفاوت کنار هم قرار گرفتهاند. React عمدتاً برای ساخت UI بر پایه component به کار میرود. Vite یک build tool با development server و مسیر production build است. Next.js یک React framework است. Astro یک web framework با معماری rendering و islandهای خودش است. Node.js یک JavaScript runtime است و .NET یک developer platform گستردهتر است که runtime، libraryها، compilerها، SDK و application stackها را در بر میگیرد.
Astro, Next.js, React, Vite, Node.js, and .NET: Different Roles — en-US
قبل از پرسیدن «کدام بهتر است؟» نقشها را جدا کنید
فرض کنید یک تیم میگوید بین React، Vite، Node.js، Next.js، Astro و .NET باید یکی را انتخاب کند. مشکل این سؤال این است که نامهایی از چند لایه متفاوت کنار هم قرار گرفتهاند. React عمدتاً برای ساخت UI بر پایه component به کار میرود. Vite یک build tool با development server و مسیر production build است. Next.js یک React framework است. Astro یک web framework با معماری rendering و islandهای خودش است. Node.js یک JavaScript runtime است و .NET یک developer platform گستردهتر است که runtime، libraryها، compilerها، SDK و application stackها را در بر میگیرد.
پس سؤال مفید «کدام اسم برنده است؟» نیست؛ سؤال درست این است: «میخواهیم کدام مسئولیت معماری را پر کنیم؟» در این درس Web Stack Role Classification Matrix v1 را میسازید تا فقط چیزهایی را با هم مقایسه کنید که واقعاً پاسخ یک سؤال معماری مشترکاند.
فقط boundaryهای لازم از درسهای قبل را حمل کنید
از WEBF-001 مرز Browser، Request/Response، resource و server را حفظ کنید. از WEBF-006 نیز component boundary را از library یا frameworkی که آن را پیاده میکند جدا نگه دارید. همین دو مرز مانع یک خطای رایج میشوند: UI library، build tool، runtime و backend platform میتوانند همزمان در یک سیستم حضور داشته باشند بدون اینکه برای یک وظیفه واحد رقابت کنند.
مالکیت این صفحه فقط طبقهبندی framework/library/build-tool/runtime/developer-platform است. این درس قرار نیست برای همه پروژهها stack انتخاب کند، API یک framework را آموزش دهد یا ادعا کند هر technology فقط یک نقش ممکن دارد.
بر اساس مسئولیت طبقهبندی کنید، نه بر اساس اسم محصول
برای reasoning از پنج bucket اصلی استفاده کنید:
- UI library — abstractionهای قابلاستفاده مجدد برای ساخت interface فراهم میکند. React در مستندات فعلی خودش را library برای web/native UI معرفی میکند که UI را از componentها میسازد. [S-REACT]
- Web framework — ساختار و convention گستردهتری برای application میدهد. Next.js خودش را React framework برای full-stack web applications معرفی میکند. Astro نیز web framework است و architecture خاص rendering/islands دارد. [S-NEXT] [S-ASTRO-ISLANDS]
- Build tool / development server — source را در زمان توسعه سرو میکند یا برای deploy تبدیل میکند. Vite development server و
vite buildرا مستند کرده است. [S-VITE] - Runtime — program را در یک environment اجرا میکند. Node.js یک JavaScript runtime است و core API آن الگوی event-driven را شامل میشود. [S-NODE]
- Developer platform / runtime stack — runtime را همراه مجموعه گستردهتری از ابزار و library و stack فراهم میکند. Microsoft، .NET را developer platform چندسکویی معرفی میکند که به runtime متکی است. [S-DOTNET]
این labelها نقش غالب در سؤال فعلی هستند، نه زندان دائمی. framework ممکن است build toolهای پاییندست را پیکربندی کند، platform ممکن است runtime داشته باشد و build tool خودش روی runtime دیگری اجرا شود. هدف جلوگیری از false equivalence است، نه ساختن جعبههای مصنوعی کاملاً جدا.
Matrix را با چهار محور مستقل بسازید
برای هر technology این چهار محور را جدا ثبت کنید:
- Primary role: مسئولیتی که در مقایسه فعلی اهمیت دارد.
- Execution location: Browser، محیط توسعه، محیط build، server/runtime host یا چند محل.
- Lifecycle phase: authoring، development، build، request handling یا browser interaction.
- Dependency/relationship: با چه چیزهایی integrate میشود، روی چه چیزی اجرا میشود یا چه چیزی را orchestration میکند.
Web Stack Role Classification Matrix v1 حداقل این fieldها را داشته باشد: technology، primary_role، responsibility، execution_location، lifecycle_phase، observed_evidence، overlap_or_dependency، comparison_peer، uncertainty، next_evidence و bounded_decision.
یک comparison فقط وقتی معنی دارد که دو گزینه پاسخ یک سؤال باشند. «React یا یک UI alternative؟» میتواند سؤال معناداری باشد. «React یا Node.js؟» معمولاً UI construction را با runtime execution مخلوط میکند و قبل از انتخاب باید خود سؤال بازنویسی شود.
یک stack میتواند چند technology از این فهرست را کاملاً منطقی کنار هم داشته باشد
مسیر source تا product را نگاه کنید. developer میتواند React component بنویسد. Vite میتواند development server و browser build را فراهم کند. یک server program میتواند روی Node.js اجرا شود یا backend روی .NET ساخته شود. Next.js میتواند یک React application را سازمان دهد و بخشی از tooling پاییندست را برای تیم تنظیم کند. Astro میتواند معماری دیگری برای pageها فراهم کند و حتی componentهای frameworkهای UI مختلف را در islandها به کار ببرد.
این coexistence به معنی بیمعنا بودن roleها نیست؛ به معنی وجود چند مسئولیت است. خطا وقتی رخ میدهد که یک نقش جای نقش دیگر گذاشته شود: مثلاً Vite را «backend» بنامیم، Node.js را «UI framework» فرض کنیم یا React و .NET را الزاماً mutually exclusive بدانیم.
uncertainty را هم ثبت کنید. وجود package.json اثبات نمیکند Node.js production requestها را serve میکند؛ شاید فقط build tooling از آن استفاده کند. وجود React source اثبات حضور Next.js نیست. وجود .NET assembly نیز بهتنهایی نمیگوید Browser UI چگونه ساخته شده است.
مثال حلشده: مستندات Astro با search widget مبتنی بر React
یک documentation site را در نظر بگیرید که Astro ساختار page و rendering را مدیریت میکند. بیشتر page از HTML ثابت تشکیل شده و فقط یک search widget با React ساخته و در Browser فعال میشود. Node.js tooling نیز در development/build استفاده میشود.
سه row مستقل بسازید:
- Astro: primary role = web framework؛ مسئولیت = application/page architecture و conventionهای rendering.
- React: primary role = UI library؛ مسئولیت = implementation همان search widget.
- Node.js: در evidence فعلی runtime مربوط به development/build tooling است؛ نقش production request-serving هنوز
UNKNOWNمیماند تا deployment evidence ارائه شود.
نتیجه مهم این است که React «جای Astro» را نگرفته و Astro هم باعث نمیشود React دیگر library نباشد. هرکدام یک مسئولیت متفاوت دارند.
قبل از انتخاب، category collapse را diagnosis کنید
Failure 1 — «Next.js vs Node.js vs React؛ فقط یکی.» این سؤال framework، runtime و UI library را با هم مخلوط میکند. آن را به سه decision مستقل تبدیل کنید.
Failure 2 — «چون vite dev site را اجرا میکند، پس Vite runtime production ماست.» development server فقط نقش development/build را ثابت میکند، نه production runtime را.
Failure 3 — «چون backend .NET است، frontend نمیتواند React باشد.» backend platform و Browser UI library میتوانند کنار هم باشند؛ interface بین آنها باید مشخص شود.
Failure 4 — «framework یعنی حتماً روی server اجرا میشود.» framework یک responsibility category است، نه تضمین execution location. mode واقعی framework و deployment را بررسی کنید.
برای برنامهنویس باتجربه: کنار اسم technology، phase و ownership بنویسید
در diagramهای قدیمی معمولاً فقط نام محصول داخل box نوشته میشد. در web stack مدرن این کافی نیست؛ چون یک repository میتواند build-time، server-time و browser-time execution داشته باشد. کنار هر box دو سؤال اضافه کنید: چه زمانی اثر دارد؟ و مالک کدام contract است؟
این کار incident diagnosis را هم سریعتر میکند. اگر production API خراب است، تغییر Vite config بیربط است مگر evidence نشان دهد مشکل از asset تولیدشده میآید. اگر Browser bundle compile نمیشود، سالم بودن .NET request handler آن failure را حل نمیکند. role classification قبل از debugging، search space را کوچک میکند.
بعد از normalizing کردن decision، alternativeها را مقایسه کنید
«بهترین stack» عمومی وجود ندارد. ابتدا responsibility و constraint را تعریف کنید و سپس peerهای همنقش را مقایسه کنید. framework decision میتواند routing، rendering mode، data integration، deployment و team skill را بررسی کند. runtime/platform decision میتواند language/runtime constraint، hosting، library ecosystem و عملیات را بسنجد. build-tool decision نیز workflow توسعه، transformation، plugin، output target و integration را بررسی میکند.
اگر دو technology partial overlap دارند، overlap را صریح ثبت کنید. overlap به معنی identity نیست. اینکه framework بخشی از build tooling را خودش configure کند، framework و build tool را synonym نمیکند.
تمرین با سؤالهای responsibility-first
Guided: تیمی Next.js را برای React application و Node.js environment را برای server-side execution به کار میبرد. برای هرکدام primary role، lifecycle phase و یک evidence لازم برای ادعای نقش اضافه بنویسید.
Independent: repositoryای شامل React source و Vite config دارید، اما backend deployment جداست و implementation آن نشان داده نشده. Matrix را بدون حدس زدن backend runtime کامل کنید. unknownها را صریح بنویسید و هر «X یا Y» را که گزینههایش همنقش نیستند بازنویسی کنید.
پاسخ قوی، guessهای مطمئن کمتری دارد؛ نه labelهای بیشتر.
چه چیزی evidence محسوب میشود؟
Matrix زمانی قابل قبول است که reviewer بتواند هر classification را به scenario evidence یا source اعلامشده trace کند و fact را از inference/design choice و unknown جدا ببیند. حداقل بررسی کنید:
- هر technology یک primary responsibility مرتبط با scenario دارد؛
- comparison peerها پاسخ یک سؤال مشترکاند؛
- overlap بدون flatten کردن categoryها توضیح داده شده؛
- execution location از روی نام محصول حدس زده نشده؛
- حداقل یک uncertainty و یک evidence که میتواند تصمیم را عوض کند ثبت شده؛
- non-claimها حفظ شدهاند: این technologyها الزاماً mutually exclusive نیستند و هیچ sourceای universal best stack را ثابت نمیکند.
Transfer مستقل
در transfer نهایی architecture عوض میشود: project از React componentها، Vite در development/build و .NET backend استفاده میکند. Matrix را از روی evidence بسازید، توضیح دهید چرا این سه میتوانند بدون contradiction کنار هم باشند و مشخص کنید کدام pairها direct comparison نامعتبرند مگر اینکه سؤال decision بازنویسی شود. صرف حضور Vite را evidence برای Node.js production runtime نگیرید.
هدف حفظ کردن شش اسم نیست؛ هدف رد کردن category error در stack جدید است.
مرز source و freshness
طبقهبندی ابزارهای نامبرده review-dated است، چون description و capability محصولات میتواند تغییر کند. source set این درس فقط مستندات رسمی فعلی React، Astro، Next.js، Vite، Node.js و .NET است. این sourceها roleهای محدود استفادهشده در درس را پشتیبانی میکنند؛ نه universal best stack را و نه این ادعا را که یک technology هیچ نقش دیگری نمیتواند داشته باشد.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
WEBF-007-SUM1 retrieval
UI library، web framework، build tool/development server، runtime و developer platform را بهعنوان categoryهای مسئولیت تعریف کنید و یک non-claim بنویسید که مانع collapse شدن categoryها شود.
WEBF-007-SUM2 application
یک repository برای ساختار page از Astro، برای یک account widget تعاملی از React و هنگام development/build از Vite استفاده میکند. نقش اصلی، evidence مربوط به execution/lifecycle، overlap و یک uncertainty را برای هرکدام classify کنید.
WEBF-007-SUM3 diagnosis
تیمی پیشنهاد میدهد Node.js process را با React جایگزین کند چون «هر دو JavaScript technology هستند». category error را تشخیص دهید و evidence لازم برای مقایسه alternativeهای واقعی برای مسئولیت runtime را بنویسید.
WEBF-007-SUM4 decision
یک project ناآشنا Vite script دارد. قبل از اینکه ادعا کنید Vite production runtime است، observationهای لازم درباره build output، deployed process، request handling و runtime/platform را مشخص کنید و فقط از evidence موجود یک تصمیم محدود بگیرید.
WEBF-007-SUM5 transfer
پروژهای از React component، از Vite هنگام development/build و از .NET backend استفاده میکند. Web Stack Role Classification Matrix v1 را کامل کنید و توضیح دهید چرا هر سه بدون تناقض category میتوانند همزمان وجود داشته باشند. overlap، uncertainty و حداقل دو non-claim را حفظ کنید.
ملاکهای ارزیابی (rubric)
A satisfactory submission preserves the lesson boundary, uses inspectable evidence, distinguishes observation from inference, states uncertainty/non-claims, and completes the changed-context transfer independently.
For application, diagnosis, decision, and transfer items, a brand/tool name or visual result alone is insufficient. Evidence must address the fields required by the lesson artifact.
Decision scenario
Where evidence is incomplete, UNKNOWN or a conditional decision is preferable to unsupported certainty.
منابع و تازگی
مطالعهٔ موارد (case studies)
رسانه و اسلایدهای درس
فایلهای آموزشی (دانلود)