# مشخصات درس‌نامه: تبدیل وب‌سایت به وب‌اپلیکیشن پیش‌رونده (PWA) با قابلیت نصب و کارکرد آفلاین - **شناسه در سیلابس:** `L15.10` - **فصل:** فصل ۱۵: تکامل محصول با AI (Ch 15) - **نوع محتوا:** 📘 درس‌نامه متنی - **زمان تقریبی مطالعه:** ۱۸ دقیقه - **پیش‌نیازهای مستقیم:** `L15.9` (استخراج بینش محصول با هوش مصنوعی) --- ## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: - [ ] **درک کند (Understand):** فناوری وب‌اپلیکیشن پیش‌رونده (Progressive Web App - PWA) را به عنوان پلی میان دنیای وب و اپلیکیشن‌های بومی بشناسد و بداند چگونه می‌توان بدون نیاز به عبور از هفت‌خوان کافه‌بازار یا اپ‌استور، سایت را قابل نصب کرد. - [ ] **تحلیل/ارزیابی کند (Evaluate):** سه ستون اصلی PWA شامل: فایل مانیفست وب (`manifest.json`)، سرویس‌ورکر (Service Worker) و استراتژی‌های کش حافظه موقت (Cache-First در برابر Network-First) را ارزیابی کند. - [ ] **به‌کار ببندد (Apply):** افزونه استاندارد Next.js PWA را در پروژه پورتفولیو نصب کرده و آیکون‌ها، رنگ پوسته، و حالت تمام‌صفحه بدون نوار آدرس (`display: standalone`) را پیکربندی نماید. - [ ] **ایجاد کند (Create):** یک سناریوی کارکرد آفلاین طراحی کند که در صورت قطع شدن کامل اینترنت، پروژه‌های پورتفولیو همچنان با سرعت بالا از روی کش باز شوند و صفحه آفلاین شکیل نمایش داده شود. --- ## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) ### آنچه باید پوشش داده شود (In-Scope): 1. **جادوی PWA: نصب مستقیم از مرورگر با یک کلیک:** * نمایش پیام «افزودن به صفحه اصلی» (Add to Home Screen) در اندروید، آیفون، ویندوز و مک. * باز شدن سایت شبیه یک اپلیکیشن کاملاً بومی بدون نوار آدرس زشت مرورگر. 2. **کالبدشکافی ستون اول: فایل مانیفست وب (`app/manifest.ts`):** * تعریف مشخصات هویتی: `name`, `short_name`, `theme_color`, `background_color`. * تعیین آیکون‌های استاندارد ۱۹۲x۱۹۲ و ۵۱۲x۵۱۲ با قابلیت تطبیق‌پذیری ماسک (Maskable Icons). * حالت نمایش تمام‌صفحه: `display: 'standalone'`. 3. **کالبدشکافی ستون دوم: سرویس‌ورکر (Service Worker):** * مامور نامرئی پشت صحنه که میان مرورگر و شبکه اینترنت می‌نشیند و درخواست‌ها را مدیریت می‌کند. * استراتژی‌های کش‌گذاری: - برای عکس‌ها، فونت‌ها و استایل‌ها: استراتژی Cache-First (اول کش، اگر نبود دانلود). - برای داده‌های داینامیک پروژه‌ها: استراتژی Stale-While-Revalidate (نمایش سریع دیتای قبلی کش و همزمان آپدیت از اینترنت). 4. **پیاده‌سازی در Next.js مدرن:** * استفاده از پکیج‌های استاندارد PWA نظیر `@ducanh2912/next-pwa`. * ساخت صفحه آفلاین اختصاصی `app/offline/page.tsx`. 5. **آزمایش امتیاز PWA در لایت‌هاوس:** * اجرای ممیزی Lighthouse در Chrome DevTools و سبز شدن نشانگر قابلیت نصب. 6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** * کال‌اوت بنفش (`
`): نحوه ذخیره‌سازی فایل‌های PWA در حافظه کش مرورگر (Cache Storage API) و تفاوت آن با localStorage. * کال‌اوت سبز (`
`): دیدن آیکون زیبای پورتفولیو در کنار سایر برنامه‌های گوشی در منوی اصلی اندروید و آیفون. * کال‌اوت قرمز (`
`): هرگز درخواست‌های دیتابیسی دارای جهش (POST/DELETE) را در سرویس‌ورکر کش نکنید! ### آنچه نباید وارد آن شویم (Out-of-Scope): - نوتیفیکیشن‌های پس‌زمینه وب‌پوش پیچیده با سرورهای VAPID اختصاصی. - ساخت کدهای اختصاصی جاوا/کاتلین اندروید (در درس بعدی با Capacitor و Expo پوشش داده می‌شود). --- ## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) | اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | | :--- | :--- | :--- | | Progressive Web App (PWA) | وب‌اپلیکیشن پیش‌رونده | سایتی با قابلیت‌های ارتقایافته نظیر نصب روی هوم‌اسکرین، اجرای آفلاین و ظاهر بومی | | Web App Manifest | مانیفست وب‌اپلیکیشن | سند پیکربندی استانداردی که نحوه نمایش، نام، آیکون‌ها و رنگ‌های برنامه را برای سیستم‌عامل مشخص می‌کند | | Service Worker | سرویس‌ورکر / کارگر خدمت‌رسان | اسکریپت پس‌زمینه‌ای که درخواست‌های شبکه را مهار کرده و مدیریت حافظه کش آفلاین را بر عهده دارد | | Standalone Display | نمایش مستقل تمام‌صفحه | حالتی از اجرای وب‌اپلیکیشن که تمام نوارها و دکمه‌های مرورگر حذف شده و حس اپلیکیشن نیتیو می‌دهد | | Stale-While-Revalidate | استراتژی تحویل فوری و اعتبارسنجی مجدد | شیوه کش‌گذاری که ابتدا دیتای موجود در حافظه را فوراً نشان می‌دهد و سپس در پس‌زمینه آخرین تغییرات را بارگذاری می‌کند | | Maskable Icons | آیکون‌های تطبیق‌پذیر | تصاویری با حاشیه امن که توسط اندروید به اشکال مربع گرد، دایره یا لوزی به درستی برش می‌خورند | --- ## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) > **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: 1. **تصویر کاور درس:** `images/cover.png` * **موضوع:** گوشی موبایل هوشمند با آیکون درخشان پورتفولیو روی هوم‌اسکرین در کنار اپلیکیشن‌های معروف و بنر تایید «نصب با موفقیت انجام شد». 2. **تفاوت تجربه وب معمولی با PWA در موبایل:** `images/standard-web-vs-pwa-mobile.png` * **موضوع:** اینفوگرافیک مقایسه‌ای: مرورگر شلوغ با نوار آدرس و تب‌ها در برابر اپلیکیشن PWA کاملاً تمیز، تمام‌صفحه و با تم رنگی اختصاصی. 3. **جریان کار سرویس‌ورکر در حالت آنلاین و آفلاین:** `images/service-worker-interception-flow.png` * **موضوع:** دیاگرام معماری: مرورگر $\rightarrow$ سرویس‌ورکر $\rightarrow$ اگر نت وصل بود: دریافت از سرور + ذخیره در کش $\rightarrow$ اگر نت قطع بود: خواندن مستقیم از Cache Storage. 4. **صفحه خطای آفلاین شکیل پورتفولیو:** `images/offline-fallback-screen-preview.png` * **موضوع:** اسکرین‌شات از نمایش صفحه در حالت قطع اینترنت با پیام ملایم: «شما آفلاین هستید، اما می‌توانید پروژه‌های ذخیره‌شده قبلی را مرور کنید.» --- ## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) 1. **تیتر اصلی:** `# تبدیل وب‌سایت به وب‌اپلیکیشن پیش‌رونده (PWA) با قابلیت نصب و کارکرد آفلاین` 2. **مقدمه:** چرا وقتی می‌توانید با چند خط کانفیگ، سایت خود را مستقیماً بدون نیاز به گوگل‌پلی یا اپ‌استور روی گوشی کارفرمایان نصب کنید، این کار را نکنید؟ 3. **جدول کاور درس** 4. **استعاره تبدیل بروشور کاغذی به یک نرم‌افزار دائمی:** * تفاوت سایتی که در تب‌های فراموش‌شده مرورگر گم می‌شود با اپلیکیشنی که روی صفحه اول گوشی جا خوش می‌کند. 5. **گام اول: ساخت سند مانیفست وب (`app/manifest.ts`):** * کدنویسی مشخصات هویتی، آیکون‌ها و رنگ تم در Next.js. 6. **گام دوم: نصب و پیکربندی Service Worker:** * نصب پکیج `@ducanh2912/next-pwa` در `next.config.js`. * تنظیم استراتژی‌های کش‌گذاری برای سرعت برق‌آسا. 7. **گام سوم: طراحی صفحه آفلاین اختصاصی (`app/offline/page.tsx`):** * احترام به کاربر در زمان قطعی شبکه و قطع امید نکردن از سایت. 8. **جعبه پرامپت طلایی: تبدیل پروژه به PWA کامل با ایجنت:** * پرامپت دقیق: > «من می‌خواهم پروژه پورتفولیو را به یک Progressive Web App کامل تبدیل کنم. لطفاً: ۱) فایل `app/manifest.ts` را با مشخصات برند، رنگ بنفش، و آیکون‌های استاندارد بساز، ۲) کانفیگ `@ducanh2912/next-pwa` را در `next.config.js` اضافه کن، و ۳) یک صفحه جذاب آفلاین در `app/offline/page.tsx` برای مواقع قطعی نت طراحی کن.» 9. **دستورات چندسکویی برای نصب پکیج PWA:** * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: - Windows (PowerShell): ```powershell npm install @ducanh2912/next-pwa ``` - macOS (Terminal): ```bash npm install @ducanh2912/next-pwa ``` - Linux (Bash): ```bash npm install @ducanh2912/next-pwa ``` 10. **باکس نکته Quera (`
`):** تولید خودکار آیکون‌های ماسکبل با ابزارهای آنلاین نظیر Maskable.app در کمتر از ۳۰ ثانیه. 11. **باکس هشدار Quera (`
`):** سرویس‌ورکرها فقط و فقط روی پروتکل امن HTTPS و روی localhost کار می‌کنند؛ سایت بدون SSL هرگز PWA نخواهد شد. 12. **باکس رضایت‌بخش Quera (`
`):** کلیک روی دکمه Install در نوار آدرس کروم و باز شدن پورتفولیو در پنجره اختصاصی نرم‌افزار دسکتاپ و موبایل. 13. **جمع‌بندی درس‌نامه:** مجهز شدن سایت به قابلیت‌های PWA؛ ورود به ساخت فایل خروجی نصبی واقعی اپلیکیشن موبایل با Capacitor و Expo در درس بعدی. --- ## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) - [ ] ارکان سه‌گانه PWA (مانیفست، سرویس‌ورکر، HTTPS) به روشنی شرح داده شود. - [ ] نحوه پیاده‌سازی گام‌به‌گام در فریم‌ورک Next.js با پکیج‌های مدرن آموزش داده شود. - [ ] استراتژی‌های کش‌گذاری آفلاین و صفحه فال‌بک آفلاین لحاظ گردد. - [ ] دستورات نصب پکیج در تب‌های چندسکویی ویندوز، مک و لینوکس گنجانده شود.