📱

آموزش مقدماتی PWA

در کمتر از ۱۵ دقیقه، مفاهیم پایه اپلیکیشن وب پیشرو (PWA) را یاد بگیرید. Manifest، Service Worker، نصب‌پذیری و کار آفلاین — با مثال‌های ساده.

۱۵ دقیقه مقدماتی رایگان
پیشرفت یادگیری: ۰ از ۶ مفهوم ۰٪

۱ PWA چیست؟

PWA (Progressive Web App — اپلیکیشن وب پیشرو) یک وب‌سایت است که مانند یک اپلیکیشن موبایل عمل می‌کند. می‌تواند روی صفحه اصلی گوشی نصب شود، آفلاین کار کند، و تجربه‌ای شبیه اپ‌های نیتیو ارائه دهد.

PWA از فناوری‌های وب استاندارد (HTML، CSS، JavaScript) ساخته می‌شود، اما ویژگی‌هایی دارد که آن را از یک وب‌سایت معمولی متمایز می‌کند:

  • نصب‌پذیر: می‌توان آن را روی صفحه اصلی نصب کرد.
  • آفلاین: بدون اینترنت هم کار می‌کند.
  • سریع: با کش هوشمند، بارگذاری سریع‌تری دارد.
  • یک کد، همه‌جا: روی موبایل، تبلت و دسکتاپ کار می‌کند.
تفاوت با اپ نیتیو: PWA نیازی به دانلود از استور ندارد و با یک لینک قابل دسترسی است. اما به برخی قابلیت‌های سخت‌افزاری (مثل بلوتوث پیشرفته یا NFC) دسترسی کامل ندارد.

۲ Web App Manifest — شناسنامه PWA

Manifest یک فایل JSON است که به مرورگر می‌گوید PWA شما چه نامی دارد، چه آیکونی، و چطور باید نمایش داده شود. بدون این فایل، مرورگر نمی‌تواند PWA را نصب کند.

// manifest.json
{
  "name": "کالاکن",
  "short_name": "کالاکن",
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#16a34a",
  "background_color": "#ffffff",
  "icons": [
    { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

برای اتصال Manifest به HTML، این خط را در <head> اضافه کنید:

<link rel="manifest" href="/manifest.json">
نکته: حداقل یک آیکون ۱۹۲×۱۹۲ و یک آیکون ۵۱۲×۵۱۲ لازم است. مرورگرهای مختلف ممکن است به اندازه‌های دیگری هم نیاز داشته باشند.

۳ Service Worker — قلب آفلاین PWA

Service Worker یک اسکریپت است که در پس‌زمینه مرورگر اجرا می‌شود و بین صفحه و شبکه قرار می‌گیرد. این اسکریپت مسئول کش کردن فایل‌ها و ارائهٔ آن‌ها در حالت آفلاین است.

ساده‌ترین Service Worker:

// sw.js
const CACHE = "kalakan-v1";
const ASSETS = ["/", "/index.html", "/style.css"];

// نصب: کش کردن فایل‌ها
self.addEventListener("install", (e) => {
  e.waitUntil(
    caches.open(CACHE).then(cache => cache.addAll(ASSETS))
  );
});

// درخواست‌ها: اول کش، بعد شبکه
self.addEventListener("fetch", (e) => {
  e.respondWith(
    caches.match(e.request).then(res => res || fetch(e.request))
  );
});

برای فعال‌سازی، این کد را در فایل JavaScript اصلی اضافه کنید:

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js");
}
نکته: Service Worker فقط در HTTPS (یا localhost) کار می‌کند. این یک الزام امنیتی است.

۴ نصب‌پذیری — نصب روی صفحه اصلی

وقتی یک وب‌سایت شرایط PWA را داشته باشد (Manifest + Service Worker + HTTPS)، مرورگر به کاربر پیشنهاد نصب می‌دهد. کاربر می‌تواند آن را روی صفحه اصلی (Home Screen) یا دسکتاپ نصب کند.

می‌توانید یک دکمهٔ نصب سفارشی هم اضافه کنید:

// نمایش دکمه نصب
let installPrompt = null;

window.addEventListener("beforeinstallprompt", (e) => {
  e.preventDefault();
  installPrompt = e;
  document.getElementById("installBtn").style.display = "block";
});

// کلیک روی دکمه
document.getElementById("installBtn").addEventListener("click", async () => {
  if (!installPrompt) return;
  const result = await installPrompt.prompt();
  console.log(result.outcome); // "accepted" یا "dismissed"
});
نکته iOS: سافاری در iOS از beforeinstallprompt پشتیبانی نمی‌کند. کاربران آیفون باید دستی از منوی اشتراک‌گذاری («Add to Home Screen») استفاده کنند. بهتر است یک راهنمای تصویری برایشان نمایش دهید.

۵ مقایسه PWA و اپ نیتیو

PWA و اپ نیتیو هر کدام مزایا و معایب خودشان را دارند. انتخاب بستگی به نیاز پروژه دارد.

ویژگی PWA اپ نیتیو
نصب از مرورگر (بدون استور) از استور
آفلاین بله (Service Worker) بله
دسترسی به سخت‌افزار محدود کامل
حجم کوچک بزرگ
به‌روزرسانی خودکار از استور
پشتیبانی iOS محدود کامل
توصیه: اگر می‌خواهید سریع و با هزینه کم به کاربران موبایل دسترسی پیدا کنید، PWA گزینهٔ عالی است. اگر به قابلیت‌های پیشرفته سخت‌افزاری نیاز دارید، اپ نیتیو بهتر است.

۶ چطور PWA بسازیم؟

مراحل ساخت یک PWA ساده:

  1. یک وب‌سایت ساده با HTML/CSS/JS بسازید.
  2. فایل manifest.json را ایجاد و به HTML متصل کنید.
  3. فایل sw.js (Service Worker) را بنویسید.
  4. Service Worker را در JS اصلی ثبت کنید.
  5. سایت را روی HTTPS قرار دهید (الزامی).
  6. با DevTools → Application → Manifest بررسی کنید.

ابزارهای مفید:

  • Lighthouse — در Chrome DevTools برای بررسی PWA
  • PWABuilder — برای بسته‌بندی PWA برای استورها
  • Workbox — کتابخانه گوگل برای ساده‌سازی Service Worker
نکته: برای شروع، یک وب‌سایت ساده را به PWA تبدیل کنید. مهم‌ترین قدم، Manifest و Service Worker است. بقیهٔ قابلیت‌ها (نوتیفیکیشن، همگام‌سازی پس‌زمینه) را بعداً می‌توانید اضافه کنید.

آزمون کوتاه

۳ سوال — دانش خود را بسنجید!

۱) کدام فایل به مرورگر می‌گوید PWA چه نام و آیکونی دارد؟
الف sw.js
ب manifest.json
ج index.html
۲) کدام فناوری باعث کار آفلاین PWA می‌شود؟
الف Service Worker
ب HTML
ج CSS
۳) برای نصب PWA، سایت باید از چه پروتکلی استفاده کند؟
الف HTTP
ب HTTPS
ج FTP