PWA چیست؟ راهنمای تصمیم، معماری و اجرای Progressive Web App

یک فروشگاه می‌خواهد روی شبکه ناپایدار سبد کاربر از بین نرود؛ تیم خدمات میدانی می‌خواهد فرم بازدید را بدون اینترنت پر کند؛ رسانه می‌خواهد مقاله ذخیره‌شده خوانده شود. پاسخ هر سه الزاماً «ساخت PWA» نیست. شاید کش درست، Draft محلی یا وب‌سایت Responsive کافی باشد؛ شاید هم محدودیت Background، سخت‌افزار یا Store، اپ Native را منطقی کند. PWA نام یک خروجی جادویی نیست؛ مجموعه‌ای از قابلیت‌های وب است که باید بر اساس Task، مرورگر و ریسک به‌صورت Progressive Enhancement اضافه شود.

این راهنما PWA را از شعار «بهترین وب و اپ» جدا می‌کند. Product fit، Manifest، Service Worker، نصب، Cache، Offline، Push، Update، امنیت، SEO، iOS/Android، سنجش هزینه و برنامه Pilot را پوشش می‌دهیم. وضعیت قابلیت‌ها در مرداد ۱۴۰۵ بازبینی شده است؛ Feature support و سیاست Store/Browser متغیرند، پس پیش از تعهد از Feature detection و تست روی Device هدف استفاده کنید.

خلاصه اجرایی: آیا PWA برای شما مناسب است؟

PWA را در Shortlist نگه دارید اگر یک یا چند نیاز واقعی زیر دارید:

  • کاربر تکراری است و Launch از Home screen یا Window مستقل اصطکاک را کم می‌کند؛
  • Read-only یا Task محدود باید در قطع/ضعف شبکه ادامه یابد؛
  • Push یا Badge برای رویداد زمان‌دار با رضایت کاربر ارزش روشن دارد؛
  • یک URL قابل‌اشتراک و دسترسی بدون Store مزیت توزیع است؛
  • تیم می‌تواند Cache، Version، Queue، Conflict و Browser matrix را اداره کند.

فعلاً PWA نسازید یا ابتدا Prototype کنید اگر تنها دلیل «مد روز»، «SEO بهتر»، «هزینه همیشه کمتر» یا «ارسال Notification بیشتر» است؛ Task بدون شبکه تعریف نشده؛ داده حساس روی Device مشترک می‌ماند؛ API حیاتی در Browser هدف پشتیبانی نمی‌شود؛ یا تیم Owner برای Service Worker و Incident ندارد.

PWA چیست و چه چیزی نیست؟

Progressive Web App یک Web application است که با قابلیت‌های Platform می‌تواند نصب، در Window مستقل اجرا، بخشی از تجربه را Offline ارائه و در Browserهای سازگار از Push/Badge/Share و APIهای دیگر استفاده کند. «Progressive» یعنی قابلیت‌ها بر اساس پشتیبانی و Permission اضافه شوند و نسخه پایه وب همچنان کار کند.

PWA یک Framework، فایل APK/IPA، استاندارد واحد با Checklist ثابت یا مترادف SPA نیست. ممکن است Multi-page/SSR باشد، Service Worker محدود داشته باشد یا فقط نصب‌پذیری را هدف بگیرد. همچنین Responsive design جای خود را به PWA نمی‌دهد؛ نمایش و تعامل موبایل پایه‌ای مستقل است.

مفهوموظیفهرابطه با PWA
Responsive webتطبیق Layout/Interaction با Viewport و Inputپایه ضروری، اما Offline/Install/Push نمی‌دهد
SPANavigation و State عمدتاً سمت Clientممکن است PWA باشد یا نباشد؛ الزام نیست
Web App ManifestMetadata نصب/Launch مانند نام، Icon، Start URL و Displayبخش کلیدی تجربه نصب‌شده در User agentهای سازگار
Service WorkerProxy برنامه‌پذیر برای Request/Eventهای پس‌زمینهCache، Offline و Push را ممکن می‌کند؛ خودکار نیست
Native appبسته پلتفرمی و API/Store integration عمیق‌ترگزینه جایگزین یا مکمل
Cross-platform wrapperکد مشترک با Runtime/Bridge و بسته StoreTrade-off متفاوت از PWA و Web-only

سه لایه اصلی معماری PWA

۱. وب قابل‌استفاده به‌عنوان پایه

پیش از Manifest و Service Worker، URLها، HTML، فرم، Navigation، Accessibility، Performance و Error state باید سالم باشند. اگر JavaScript یا قابلیت پیشرفته شکست، کاربر باید دست‌کم محتوای ضروری و راه بعدی را ببیند. برای تست پایه موبایل، از راهنمای Mobile-friendly برای SEO و UX استفاده کنید.

۲. Metadata نصب و Launch

Web App Manifest یک فایل JSON است که User agent از آن برای نام، Icon، start_url، scope، display، id، جهت و زبان استفاده می‌کند. Snapshot رسمی W3C در مه ۲۰۲۶ هنوز Working Draft است و صریح می‌گوید پیاده‌سازی‌ها ممکن است برای استفاده کامل، Memberهای متفاوتی بخواهند: Web Application Manifest.

۳. قابلیت‌های Event-driven

Service Worker خارج از DOM و مستقل از عمر یک Tab اجرا می‌شود و می‌تواند Requestهای داخل Scope، Push و برخی Eventهای سازگار را مدیریت کند. این لایه قدرتمند است، چون پاسخ Cache یا Network را تعیین می‌کند؛ و پرریسک است، چون Bug می‌تواند نسخه قدیمی، Loop یا پاسخ اشتباه را به تعداد زیادی کاربر برساند.

Manifest را مثل قرارداد هویت اپ طراحی کنید

Member/Assetتصمیمخطای رایج
idهویت پایدار نصب مستقل از تغییر Start URLتغییر ناخواسته و ایجاد نصب/Identity جدا
name/short_nameنام روشن در Launcher و UI محدودنام تبلیغاتی بریده یا ناسازگار با برند
start_urlصفحه Launch امن و معنادارUTM ثابت، Redirect chain یا صفحه Login بن‌بست
scopeمرز Navigation تحت تجربه اپخروج ناگهانی به Browser یا Scope بیش‌ازحد
displayBrowser/standalone/fullscreen بر اساس Taskحذف کنترل Browser بدون Back/Recovery داخلی
iconsاندازه، Purpose و Safe area چندپلتفرمیIcon تار، Crop‌شده یا متن ریز
dir/langهویت فارسی/RTL در سطح Manifestنام و Shortcut با جهت اشتباه
Shortcuts/Screenshotsورودی سریع و توضیح نصب در Surface سازگارفرض پشتیبانی یکسان در همه Browserها

Manifest را Version-controlled، با MIME درست، URLهای ۲۰۰ و Iconهای قابل‌دسترسی منتشر کنید. Deep link داخل Scope، Launch از حالت Login/Logout و تغییر دامنه را در Test plan بیاورید.

نصب PWA در iOS، Android و Desktop یکسان نیست

عبارت «کاربر با یک کلیک، بدون Store نصب می‌کند» عمومی نیست. Browser و OS درباره Install surface، Prompt، Package و Launch تصمیم می‌گیرند. برخی User agentها حتی هر Website را به‌شکل App نصب می‌کنند؛ Manifest همچنان برای هویت و تجربه سفارشی مفید است.

وضعیت عملی نصب

  • در Chromium، Install UI و امکان Trigger کردن Dialog در شرایط سازگار وجود دارد؛
  • beforeinstallprompt استاندارد وب نیست و عمدتاً Chromium-based است؛ UI نصب را فقط وقتی Event/Feature موجود است نشان دهید؛
  • در iOS/iPadOS مسیر Add to Home Screen و رفتار UI با نسخه سیستم تغییر کرده است؛ Safari ۲۶ اعلام کرده Website اضافه‌شده به Home Screen به‌طور پیش‌فرض Web app باز می‌شود و کاربر می‌تواند گزینه را تغییر دهد؛
  • در Desktop، Safari/Chromium/Edge رفتارهای متفاوت دارند و Firefox الزاماً نصب Manifest-based ارائه نمی‌کند؛
  • بسته‌بندی برای Store ممکن است با TWA/WKWebView/Package انجام شود، اما Policy، Billing، Review و API Store را باید جدا ارزیابی کرد.

منبع جاری WebKit: قابلیت‌های Web App در Safari ۲۶. برای محدودیت Prompt نیز راهنمای Install prompt در MDN هشدار می‌دهد که beforeinstallprompt غیر‌استاندارد و Chromium-specific است.

UX نصب سالم

  • در ورود اول Prompt ندهید؛ بعد از اینکه کاربر ارزش تکرارشونده را تجربه کرد پیشنهاد کنید؛
  • Benefit مشخص بگویید: «دسترسی سریع به سفارش‌ها» نه «تجربه بهتر»؛
  • اگر نصب پشتیبانی نمی‌شود، CTA مرده یا دستور اشتباه نشان ندهید؛
  • ردکردن را محترم بشمارید و Prompt داخلی را هر Session تکرار نکنید؛
  • Uninstall و پاک‌کردن داده را در Help توضیح دهید؛
  • Install rate را با Eligibility/Exposure/Prompt/Accept/Launch مرحله‌بندی کنید.

Offline یک Spectrum است، نه Checkbox

Service Worker خودبه‌خود سایت را Offline نمی‌کند. باید برای هر Task تعیین کنید در حالت Online، Flaky، Offline و Reconnect چه رخ می‌دهد.

سطحتجربهسناریوی مناسب
Offline fallbackصفحه توضیح و راه Retryحداقل قابل‌قبول برای مسیر Network-only
Read last knownنمایش داده Cache با زمان آخرین Updateمقاله، کاتالوگ یا سفارش گذشته
Local draftورودی روی Device ذخیره و بعداً ارسال می‌شودفرم طولانی یا عملیات میدانی
Queued mutationدرخواست با Idempotency و وضعیت Pending صف می‌شوداقدام کم‌ریسک و قابل‌تکرار کنترل‌شده
Offline-first dataLocal database و Sync/Conflict model کاملمحصولی که Offline هسته ارزش آن است

چه چیزی را Offline وانمود نکنیم؟

قیمت، موجودی، مجوز، وضعیت لحظه‌ای و پرداخت نیازمند Freshness یا Verify سرورند. کاربر می‌تواند سبد را Offline ویرایش کند، اما «خرید موفق» نباید پیش از تأیید Server/درگاه نمایش داده شود. داده Cache باید برچسب «آخرین به‌روزرسانی» و Retry داشته باشد.

استراتژی Cache را بر اساس نوع داده انتخاب کنید

یک Cache-first سراسری علت رایج محتوای کهنه و Bug است. Cache API جدا از HTTP cache است و Routeها به سیاست‌های متفاوت نیاز دارند. مستند رسمی Chrome/Workbox پنج Strategy رایج را توضیح می‌دهد: Service worker caching strategies.

ResourceStrategy شروعGuardrail
Asset هش‌شدهCache first/PrecacheVersion hash، Expiration و Atomic deploy
HTML/NavigationNetwork first با FallbackTimeout، Offline page و جلوگیری از App shell برای ۴۰۴
تصویر عمومیStale-while-revalidate یا Cache firstQuota، Expiration، Variant و CORS
مقاله عمومیNetwork first یا SWR بر اساس Freshnessزمان Update و Purge محتوای اصلاح‌شده
قیمت/موجودیNetwork first/Network onlyTTL کوتاه، Timestamp و Verify در Commit
حساب/داده شخصیNetwork only یا Cache خصوصی طراحی‌شدهPartition بر User، Logout purge و Device مشترک
پرداخت/CallbackNetwork onlyIdempotency، Reconciliation و Unknown state

برای مرزبندی Browser/CDN/Object/Application cache، راهنمای معماری Cache سایت را کنار PWA policy بخوانید.

چرخه Service Worker و مشکل نسخه کهنه

Service Worker جدید معمولاً Install می‌شود و تا بسته‌شدن Clientهای تحت کنترل در حالت Waiting می‌ماند. این رفتار برای جلوگیری از اجرای هم‌زمان نسخه ناسازگار Shell و Asset طراحی شده است. skipWaiting() همگانی می‌تواند صفحه باز را وسط کار به Worker جدید بسپارد و قرارداد نسخه را بشکند.

Release policy پیشنهادی

  1. Assetها را Content-hash و Manifest build را Atomic منتشر کنید.
  2. HTML را طوری Cache کنید که Asset نسخه حذف‌شده را اشاره نکند.
  3. Worker جدید را در Waiting شناسایی و برای تغییر ناسازگار Prompt «نسخه جدید آماده است» نشان دهید.
  4. Draft/Checkout فعال را پیش از Reload حفظ یا تکمیل کنید.
  5. Cacheهای قدیمی را فقط پس از Activation امن حذف کنید.
  6. Telemetry نسخه Page/Worker/API را برای تشخیص Split-brain ثبت کنید.
  7. Kill switch، Rollback و Unregister کنترل‌شده داشته باشید.

راهنمای رسمی چرخه Service Worker lifecycle هدف Waiting/Activation و Update را تشریح می‌کند.

ذخیره Draft، Queue و Conflict

Offline write از نمایش Cache پیچیده‌تر است. هر Mutation باید شناسه پایدار، وضعیت و قانون تکرار داشته باشد.

مسئلهکنترل
ارسال تکراریIdempotency key و Deduplication سرور
Retry بی‌نهایتBackoff، سقف تلاش و وضعیت Failed قابل‌مشاهده
تغییر هم‌زمانVersion/ETag و Conflict UI؛ نه Last-write-wins پنهان
تغییر SchemaMigration IndexedDB با Rollback و Backup محدود
Logout/تعویض حسابPartition و پاک‌سازی Draft/Cache حساس
Device مشترکTimeout، Encryption متناسب و عدم ذخیره داده پرریسک
صف پرشدهQuota/Size limit و انتخاب/حذف توسط کاربر

Background Sync در همه Browser/حالت‌ها یکسان نیست؛ Queue باید هنگام بازشدن دوباره App نیز قابل ارسال باشد. Feature detection و Pending UI الزامی‌اند.

Push Notification: Permission یک کانال بازاریابی رایگان نیست

Push می‌تواند برای وضعیت سفارش، پیام عملیاتی یا Deadline ارزشمند باشد؛ درخواست Permission هنگام اولین بازدید معمولاً Context کافی ندارد. ابتدا Preference داخلی بگیرید، Benefit و Frequency را توضیح دهید، سپس در پاسخ به تعامل مستقیم Permission سیستم را بخواهید.

iOS و Web Push

WebKit از iOS/iPadOS ۱۶.۴ برای Web app اضافه‌شده به Home Screen، Web Push را پشتیبانی می‌کند و درخواست Permission باید در پاسخ به تعامل مستقیم کاربر باشد. این به معنای پشتیبانی یکسان در همه Browser/نسخه‌ها یا اجازه Silent push نیست. منبع رسمی: Web Push for Web Apps on iOS and iPadOS.

سیاست Push سالم

  • Transactional، Reminder و Marketing را Preferenceهای جدا کنید؛
  • هر Notification ارزش، فرستنده و Destination امن داشته باشد؛
  • داده حساس را روی Lock screen فاش نکنید؛
  • Frequency cap، Quiet hours و Unsubscribe ساده بدهید؛
  • Token/Subscription منقضی را پاک و Consent proof را نگهداری کنید؛
  • Delivery را معادل دیده‌شدن یا Conversion نگیرید؛
  • Provider/Endpoint خارجی را از نظر دسترسی، حریم خصوصی و Exit بررسی کنید.

امنیت PWA و Service Worker

Service Worker داخل Origin مانند یک Network proxy برنامه‌پذیر عمل می‌کند؛ XSS یا Supply-chain compromise می‌تواند Cache و Requestها را تحت‌تأثیر قرار دهد. HTTPS شرط Secure context است، اما امنیت کامل نیست.

  • Scope Worker را حداقل و فایل آن را First-party و قابل‌ممیزی نگه دارید؛
  • CSP، Subresource policy، Dependency pinning و Build provenance را اجرا کنید؛
  • Response قبل از Cache از نظر Status، Origin، Content type و Cacheability اعتبارسنجی شود؛
  • Response احراز‌شده را در Cache عمومی/مشترک نریزید؛
  • Logout، Revocation و حذف حساب باید Cache، IndexedDB و Queue حساس را پوشش دهد؛
  • Push payload و Deep link را Untrusted input بدانید؛
  • Update Worker، Manifest و Offline page در Incident/Revocation plan باشند؛
  • پرداخت و تغییر حساس فقط پس از Authorization/Validation سرور انجام شود.

برای دفاع Browser-side و Rollout بدون شکستن Scriptهای لازم، راهنمای Content Security Policy و XSS را ببینید.

PWA ذاتاً سریع نیست

Cache می‌تواند Navigation تکراری را سریع‌تر کند، اما Bundle سنگین، Hydration، Long task، Service Worker startup یا Precache بزرگ تجربه اول را بدتر می‌کنند. Performance را روی First visit، Repeat، Installed، Online/Flaky و Deviceهای اقتصادی جدا بسنجید.

بودجه عملکرد

  • JS اولیه و زمان Main thread؛
  • حجم Precache و Runtime cache؛
  • LCP/INP/CLS واقعی به تفکیک Mode؛
  • زمان Launch نصب‌شده و Route transition؛
  • Service Worker install/activate/fetch error؛
  • Quota eviction و Cache hit/stale rate؛
  • مصرف داده/باتری برای Sync و Push.

راهنمای سرعت سایت و Performance budget روش اتصال Lab، Field/RUM و KPI کسب‌وکار را توضیح می‌دهد.

Accessibility در حالت Standalone

وقتی Chrome مرورگر پنهان می‌شود، App باید Navigation و Recovery خود را درست انجام دهد. این موارد را تست کنید:

  • Back، Deep link، Refresh، Escape و بازگشت از لینک خارج Scope؛
  • Focus پس از Route transition و Dialog نصب/Update؛
  • Screen reader announcement برای Offline/Pending/Sync/Updated؛
  • Keyboard و Pointer در Desktop installed window؛
  • Zoom، Reflow، Safe area، Orientation و Virtual keyboard؛
  • Reduced motion و عدم استفاده از Animation به‌عنوان تنها Status؛
  • رنگ/آیکون/نام مناسب در Launcher و App switcher؛
  • فارسی/RTL، Bidi و اعداد/تاریخ/ارز در Manifest و UI.

PWA چه اثری بر SEO دارد؟

PWA چون روی Web و URLهاست می‌تواند محتوای قابل Crawl داشته باشد، اما نصب‌پذیری، Manifest یا Service Worker رتبه بهتر تضمین نمی‌کنند. App shell خالی، CSR شکست‌خورده، URLهای بدون Deep link، Soft ۴۰۴ یا Cache قدیمی می‌توانند Discovery/Render/Index را بدتر کنند.

HTML اولیه، URL مستقل، Link واقعی، Status، Canonical، Metadata/Schema Route-aware و برابری محتوا را حفظ کنید. جزئیات در راهنمای سئو PWA، رندر JavaScript و Index آمده است.

PWA، Native یا Cross-platform؟

معیارResponsive/PWACross-platform wrapperNative
توزیع URLمستقیم و قابل‌اشتراکWeb + Store بسته به معماریعمدتاً Store/Deep link
نصبوابسته به Browser/OSPackage و StoreStore/Enterprise
Offlineقابل‌طراحی با SW/Storageقابل‌طراحی با Runtime/Native storageکنترل عمیق‌تر، همچنان نیازمند معماری
API دستگاهFeature-dependent و ناهمسانBridge/Plugin-dependentعمیق‌تر و سریع‌تر به API جدید
Backgroundمحدود به سیاست Browser/OSبه Plugin/Policy وابستهکنترل بیشتر با محدودیت OS
عملیاتWeb deploy + SW lifecycleWeb/Native build و Store reviewچند Release train و Store
هزینهممکن است کمتر باشد، نه تضمینیReuse بیشتر با هزینه Bridgeبالاتر در برخی Scopeها، اما مناسب قابلیت عمیق

Decision gates

  1. سه Task اصلی و Frequency بازگشت کاربر چیست؟
  2. چه Taskای باید Offline/Poor network کار کند و Definition of done آن چیست؟
  3. API/Permission لازم در Browser/OS/نسخه هدف واقعاً پشتیبانی می‌شود؟
  4. آیا Store discovery، In-app purchase یا Device integration جزء مدل کسب‌وکار است؟
  5. داده روی Device چه حساسیت و Retentionی دارد؟
  6. هزینه Browser matrix، Service Worker operations و Support چقدر است؟
  7. نسخه Web بدون قابلیت پیشرفته چه تجربه‌ای دارد؟
  8. کدام Evidence در Pilot تصمیم Go/No-go می‌سازد؟

سناریوهای مناسب و نامناسب

سناریوتناسبدلیل
رسانه با مطالعه ذخیره‌شدهخوب برای PilotRead offline، URL و Update کنترل‌پذیر
کاتالوگ فروش با سبد محلیخوب با GuardrailBrowse ضعیف‌شبکه؛ قیمت/موجودی/پرداخت باید Online Verify شود
فرم بازدید میدانیقوی اما پیچیدهDraft/Queue ارزش دارد؛ Conflict/Encryption/Sync لازم است
وبلاگ کم‌بازگشتاغلب کم‌ارزشهزینه Install/SW ممکن است از Benefit بیشتر باشد
بازی گرافیکی با API عمیقنیازمند BenchmarkPerformance، Store و Device API تعیین‌کننده‌اند
پرداخت کامل OfflineنامعتبرAuthorization، موجودی و Verify نیازمند Server/شبکه‌اند

ملاحظات ویژه کاربران ایران

  • شبکه: Offline را از روی کلیشه نسازید؛ RUM و پژوهش نشان دهد کدام Route/ISP/Device مشکل دارد.
  • سرویس خارجی: Push provider، Font، Map، Captcha، Analytics و CDN را برای دسترسی، Policy، Failover و Exit ارزیابی کنید.
  • پرداخت: Cart/Draft می‌تواند Local باشد، اما مبلغ/موجودی و موفقیت پرداخت باید Server-side تأیید شوند؛ Callback در Cache نیفتد.
  • OTP: Delay/Resend/Expiry و بازگشت به App نصب‌شده را روی Android/iOS تست کنید.
  • RTL: Manifest dir/lang، Shortcut، Notification، Bidi URL/شماره و فونت فارسی را پوشش دهید.
  • Device: Precache بزرگ و JS سنگین روی گوشی اقتصادی و Storage محدود هزینه دارد.
  • حریم خصوصی: Push، Location، Camera و Draft حساس نیازمند Purpose، Permission و Retention روشن‌اند.
  • Store: PWA می‌تواند دسترسی مستقیم وب بدهد، اما نصب، Discovery و Policy روی همه Platformها یکسان نیست.

اندازه‌گیری موفقیت PWA

Install و Push opt-in هدف نهایی نیستند. Metric tree را به Task و Outcome وصل کنید.

لایهMetricGuardrail
Eligibility/InstallEligible→Exposed→Prompt→Accepted→First launchPrompt fatigue و Uninstall
OfflineOffline task success، Draft saved، Sync success/timeConflict، duplicate، stale data و queue loss
PushOpt-in، Delivery، Open، Task completionUnsubscribe، complaint و frequency
PerformanceCWV، launch/route time و cache hit/staleJS/Storage/Data/Battery
ReliabilitySW error، update mismatch، API/error و rollbackIncident by version/browser
BusinessContribution، qualified task، retention افزایشیAttribution و Control group

Installed users خودانتخاب‌گر و احتمالاً وفادارترند؛ مقایسه خام آن‌ها با Web users اثر PWA را ثابت نمی‌کند. انتشار مرحله‌ای، Eligibility-matched cohort یا Experiment مناسب بسازید. برای TCO/Payback و Counterfactual از راهنمای محاسبه ROI طراحی سایت استفاده کنید.

Test matrix پیش از انتشار

محورCaseهای حداقلی
Browser/OSChrome/Android، Safari/iOS جاری و یک نسخه پشتیبانی‌شده، Desktop هدف
ModeBrowser tab، Installed/Standalone، Deep link و بازشدن از Notification
NetworkOnline، Slow، Flaky، Offline، Reconnect و DNS/API failure
VersionFresh install، Update waiting، چند Tab، Rollback و Asset حذف‌شده
IdentityGuest، Login، Logout، تعویض حساب و Device مشترک
StorageQuota کم، Eviction، Corrupt DB و Migration
TaskRead، Draft، Queue، Conflict، Payment return و Error recovery
AccessibilityKeyboard، Screen reader، Zoom، RTL، reduced motion و status announcement

Logها باید Page version، Worker version، Route، Browser/OS class و Mode را بدون Fingerprinting غیرضروری ثبت کنند. برای SLO، Alert، Trace و Release annotation، راهنمای Observability سایت را ببینید.

برنامه Pilot هشت‌هفته‌ای

هفته ۱–۲: Discovery و Feature matrix

  • Task، Segment، Network و Browser target را از داده واقعی انتخاب کنید.
  • Responsive baseline و مشکل قابل‌حل را اندازه بگیرید.
  • API/Permissionها را با Feature detection روی Device تست کنید.
  • TCO، Risk register، Success/Guardrail و Kill criteria بسازید.

هفته ۳–۴: Vertical slice

  • Manifest، Icon، Launch و یک Task مستقل را پیاده کنید.
  • Cache policy Route-specific و Offline fallback بسازید.
  • Update/rollback و نسخه Worker/Page/API را ثبت کنید.
  • Security/Privacy/Accessibility review اجرا کنید.

هفته ۵–۶: Offline/Push با دامنه محدود

  • فقط یک Draft/Read task را Offline کنید.
  • Idempotency، Queue، Retry و Conflict را تست کنید.
  • Push را برای یک Use case زمان‌دار و Opt-in اجرا کنید.
  • Browser/OS/Network matrix واقعی را کامل کنید.

هفته ۷–۸: انتشار مرحله‌ای و تصمیم

  • Rollout کوچک با RUM، Error و Support monitoring انجام دهید.
  • Installed/eligible/control را بدون Selection-bias ساده مقایسه نکنید.
  • Benefit، هزینه عملیات و Incident را با فرض اولیه بسنجید.
  • Go/Iterate/Stop را بر Task success و Guardrail تصمیم بگیرید.

چک‌لیست نهایی PWA

  • نیاز Install/Offline/Push از Task واقعی آمده، نه Trend.
  • نسخه Web پایه بدون قابلیت پیشرفته قابل‌استفاده است.
  • Manifest، id/start_url/scope/display/icons/dir/lang تست شده‌اند.
  • Install UX بر اساس Feature detection است و Prompt مزاحم نیست.
  • برای هر Route سیاست Cache، TTL، Version و Purge داریم.
  • قیمت، موجودی، حساب و پرداخت Stale یا عمومی Cache نمی‌شوند.
  • Offline state، Timestamp، Pending، Retry و Conflict روشن‌اند.
  • Mutationها Idempotency، Dedup و سقف Retry دارند.
  • Service Worker update، Waiting، rollback و Kill switch تست شده‌اند.
  • Logout/تعویض حساب Cache، DB و Queue حساس را پاک می‌کند.
  • Push Purpose، Permission، Frequency، Privacy و Unsubscribe دارد.
  • CSP، Dependency، Cache validation و Deep link امن‌اند.
  • First/repeat/installed و Browser/OS/Network واقعی سنجیده می‌شوند.
  • Standalone navigation و Accessibility کامل تست شده‌اند.
  • SEO به HTML/URL/Status/Canonical متکی است، نه نصب‌پذیری.
  • TCO، Owner، Monitoring و معیار Go/No-go ثبت شده‌اند.

سؤالات متداول

PWA چیست؟

PWA یک Web application است که با Progressive enhancement می‌تواند قابلیت‌هایی مانند نصب، Window مستقل، Offline محدود، Push و Integration پلتفرمی را در Browserهای سازگار ارائه دهد. PWA Framework یا مترادف SPA نیست و هر قابلیت به Manifest، Service Worker، Permission و پشتیبانی Platform وابسته است.

آیا PWA روی همه گوشی‌ها نصب می‌شود؟

مسیر و سطح نصب میان Browser، OS و نسخه متفاوت است. beforeinstallprompt عمدتاً Chromium-specific و روی iOS پشتیبانی نمی‌شود؛ iOS مسیر Add to Home Screen خود را دارد. Manifest و Feature detection بسازید و روی Deviceهای هدف تست کنید.

آیا PWA بدون اینترنت کامل کار می‌کند؟

نه خودکار و نه لزوماً کامل. شما تعیین می‌کنید چه Asset/داده‌ای Cache، چه Draftی Local و چه Mutationی Queue شود. پرداخت، قیمت و موجودی معمولاً به Network و Verify سرور نیاز دارند. Offline باید Timestamp، Pending، Retry و Conflict داشته باشد.

آیا PWA از اپ Native ارزان‌تر است؟

گاهی، اما تضمینی نیست. یک Codebase وب می‌تواند هزینه را کم کند، ولی Browser matrix، Service Worker، Sync، Store packaging، Security، QA و Operations هزینه دارند. مقایسه را با Scope و TCO یکسان انجام دهید.

آیا PWA سئو را بهتر می‌کند؟

نصب، Manifest یا Service Worker سیگنال تضمینی رتبه نیستند. چون PWA روی Web است می‌تواند URL و HTML قابل Crawl داشته باشد؛ اما CSR، App shell، Status، Canonical و Cache غلط ممکن است Index را آسیب بزنند. اصول JavaScript SEO را مستقل اجرا کنید.

جمع‌بندی

PWA آینده قطعی همه سایت‌های موبایل نیست؛ یک گزینه معماری برای Taskهای مشخص است. ارزش آن زمانی شکل می‌گیرد که نصب، Offline یا Push درد واقعی را حل کند و تیم بتواند Cache، Update، Queue، Security و Browser fragmentation را اداره کند.

از Responsive web سالم شروع کنید، یک Vertical slice بسازید و قابلیت‌ها را با Feature detection اضافه کنید. نتیجه را با Task success، Reliability، هزینه عملیات و Outcome افزایشی بسنجید. اگر Pilot نشان داد ارزش بیشتر از پیچیدگی است، PWA را گسترش دهید؛ اگر نه، همان وب خوب پاسخ بهتری است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *