آموزش ساخت وب اپلیکیشن با PWA

آموزش ساخت وب اپلیکیشن با PWA به شما کمک می‌کند اپلیکیشن‌هایی سریع، آفلاین‌محور، و مشابه اپ‌های بومی بسازید. این اپلیکیشن‌ها بدون نیاز به نصب از فروشگاه‌ها در دسترس‌اند و کاربران می‌توانند با یک کلیک آن‌ها را به صفحه اصلی اضافه کنند. نصب سریع انجام می‌شود و نیازی به مجوزهای پیچیده ندارد.

850,000تومــــــــــــــــــــان

آموزش ساخت وب اپلیکیشن با PWA
مدرس دوره: حسن سلگی

مدرس دوره: حسن سلگی

در این دوره تمام تلاشم رو میکنم تا به بهترین روش ممکن، از آموزش استاندارد و اصولی لذت ببرید و آماده بازار کار بشید.

9

تعداد قسمت آموزش

222

دانشجو

165 دقیقه

زمان آموزش

4.8/5

رضایت کاربران

پشتیبانی

کامل آموزش
آموزش ساخت وب اپلیکیشن با PWA

شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.
شما هنوز در این دوره شرکت نکرده‌اید.

توضیحات


آموزش PWA : PWA چیست؟ Progressive Web App (PWA) یا اپلیکیشن وب پیشرفته، نوعی از اپلیکیشن‌های وب است که از فناوری‌های وب استاندارد مانند HTML، CSS و JavaScript استفاده می‌کند تا تجربه‌ای مشابه اپلیکیشن‌های بومی (Native) را برای کاربران فراهم کند. این اپلیکیشن‌ها می‌توانند بدون نیاز به نصب از طریق فروشگاه‌های اپلیکیشن، مستقیماً از طریق مرورگر وب اجرا شوند.

PWAها به گونه‌ای طراحی شده‌اند که به طور تدریجی (Progressive) بهبود پیدا کنند و ویژگی‌ها و قابلیت‌های پیشرفته‌ای را ارائه دهند که باعث می‌شود عملکرد و تجربه کاربری آن‌ها در مرورگرهای مختلف و بر روی دستگاه‌های مختلف بهبود یابد.

مزایای آموزش PWA نسبت به اپلیکیشن‌های سنتی وب و موبایل

مزایای آموزش PWA نسبت به اپلیکیشن‌های سنتی وب و موبایل

1. نصب آسان و سریع

PWAها نیازی به نصب از فروشگاه‌های اپلیکیشن ندارند. کاربران می‌توانند با یک کلیک اپلیکیشن را به صفحه اصلی دستگاه خود اضافه کنند. این فرآیند نصب سریع و بدون نیاز به مجوزهای پیچیده انجام می‌شود.

2. قابلیت استفاده آفلاین

یکی از بزرگترین مزایای PWAها این است که می‌توانند حتی در حالت آفلاین نیز عملکرد داشته باشند. این قابلیت با استفاده از Service Worker ها امکان‌پذیر است که اجازه می‌دهد منابع مورد نیاز اپلیکیشن در حافظه محلی دستگاه ذخیره شوند.

3. پرفورمنس بهتر

PWA ها بهینه‌سازی شده‌اند تا با سرعت بالا بارگذاری شوند و تجربه کاربری بهتری ارائه دهند. این اپلیکیشن‌ها معمولاً از تکنیک‌های کشینگ پیشرفته برای ذخیره داده‌ها استفاده می‌کنند که باعث کاهش زمان بارگذاری می‌شود.

4. نوتیفیکیشن‌های پوش

PWA ها می‌توانند نوتیفیکیشن‌های پوش را به کاربران ارسال کنند، حتی زمانی که اپلیکیشن بسته باشد. این ویژگی باعث می‌شود که ارتباط با کاربران بهبود یابد و آن‌ها از بروزرسانی‌ها و اطلاعات جدید مطلع شوند.

5. تطبیق‌پذیری و واکنش‌گرا بودن

PWAها به صورت واکنش‌گرا طراحی شده‌اند و می‌توانند بر روی انواع دستگاه‌ها از جمله دسکتاپ، تبلت و موبایل به خوبی نمایش داده شوند. این تطبیق‌پذیری باعث می‌شود که تجربه کاربری یکسان و بدون مشکل در دستگاه‌های مختلف ارائه شود.

تاریخچه و کاربردهای PWA – آموزش ساخت وب اپلیکیشن با PWA

ایده اولیه PWA توسط گوگل در سال 2015 معرفی شد. این مفهوم با هدف بهبود تجربه کاربری در وب و کاهش فاصله بین اپلیکیشن‌های وب و بومی ایجاد شد. گوگل با معرفی تکنولوژی‌هایی مانند Service Worker و Web App Manifest، پایه‌های PWA را بنا نهاد و از آن زمان تاکنون، PWAها به سرعت مورد توجه توسعه‌دهندگان و شرکت‌ها قرار گرفته‌اند. در مقاله قصد داریم تا به آموزش PWA به طور کامل بپردازیم.

کاربردهای PWA

PWAها در صنایع و کاربردهای مختلفی مورد استفاده قرار می‌گیرند. برخی از مهمترین کاربردهای PWA عبارتند از:

  • تجارت الکترونیک: فروشگاه‌های آنلاین می‌توانند با استفاده از PWAها تجربه خرید بهتری را به کاربران ارائه دهند، خصوصاً در شرایطی که اتصال به اینترنت ضعیف است.
  • رسانه و سرگرمی: وب‌سایت‌های خبری، وبلاگ‌ها و پلتفرم‌های ویدئویی می‌توانند از PWAها برای ارائه محتوای آفلاین و نوتیفیکیشن‌های پوش استفاده کنند.
  • شبکه‌های اجتماعی: پلتفرم‌های اجتماعی می‌توانند با استفاده از PWAها تجربه کاربری بهتری را به کاربران ارائه دهند و تعاملات را افزایش دهند.
  • آموزش: پلتفرم‌های آموزشی می‌توانند با استفاده از PWAها به کاربران اجازه دهند تا محتوا را به صورت آفلاین مطالعه کنند و از امکانات تعاملی بیشتری بهره‌مند شوند.

در مجموع، PWAها با ارائه ترکیبی از بهترین ویژگی‌های اپلیکیشن‌های وب و بومی، نقش مهمی در بهبود تجربه کاربری و افزایش کارایی اپلیکیشن‌ها ایفا می‌کنند.

ساختار و معماری PWA - آموزش ساخت وب اپلیکیشن با PWA

ساختار و معماری PWA – آموزش ساخت وب اپلیکیشن با PWA

Progressive Web Apps (PWA) با استفاده از فناوری‌های وب استاندارد ساخته می‌شوند که عبارتند از:

1. HTML (Hypertext Markup Language)

HTML زبان نشانه‌گذاری استاندارد برای ایجاد صفحات وب است. در PWAها، HTML به عنوان ساختار اصلی صفحات وب استفاده می‌شود و محتوای اپلیکیشن را تعریف می‌کند. این زبان شامل عناصر مختلفی مانند سرصفحه‌ها، پاراگراف‌ها، لینک‌ها، تصاویر و فرم‌ها است.

2. CSS (Cascading Style Sheets)

CSS برای توصیف ظاهر و نحوه نمایش عناصر HTML استفاده می‌شود. این زبان به توسعه‌دهندگان اجازه می‌دهد تا صفحات وب را زیباتر و کاربرپسندتر کنند. در PWAها، CSS برای ایجاد طرح‌بندی‌های واکنش‌گرا و بهینه‌سازی ظاهر اپلیکیشن‌ها در دستگاه‌های مختلف استفاده می‌شود.

3. JavaScript

JavaScript زبان برنامه‌نویسی اصلی برای تعاملات و عملکردهای پویا در صفحات وب است. در PWAها، JavaScript برای مدیریت داده‌ها، تعامل با کاربران و اجرای منطق اپلیکیشن استفاده می‌شود. این زبان همچنین برای استفاده از APIهای مختلف وب مانند Service Worker و Push Notification به کار می‌رود.

معرفی Web App Manifest – آموزش PWA

Web App Manifest یک فایل JSON است که اطلاعات مهمی را درباره PWA ارائه می‌دهد. این فایل به مرورگر کمک می‌کند تا اپلیکیشن را به عنوان یک اپلیکیشن وب شناسایی کند و امکاناتی مانند افزودن به صفحه اصلی را فراهم کند.

اجزای Web App Manifest

  • name و short_name: نام کامل و کوتاه اپلیکیشن که در صفحه اصلی و نوار عنوان نمایش داده می‌شوند.
  • icons: آیکون‌های مختلف اپلیکیشن برای استفاده در صفحه اصلی و نوار ابزار.
  • start_url: آدرس URL اولیه که هنگام باز کردن اپلیکیشن استفاده می‌شود.
  • display: نوع نمایش اپلیکیشن که می‌تواند حالت‌های مختلفی مانند fullscreen، standalone، minimal-ui و browser را شامل شود.
  • theme_color و background_color: رنگ‌های تم و پس‌زمینه که برای سفارشی‌سازی ظاهر اپلیکیشن استفاده می‌شوند.

نمونه‌ای از یک فایل manifest.json: – آموزش ساخت وب اپلیکیشن با PWA

{
  "name": "My PWA",
  "short_name": "PWA",
  "icons": [
    {
      "src": "/images/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/images/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "start_url": "/index.html",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

معرفی Service Workers – آموزش PWA

Service Workers یکی از مهم‌ترین اجزای PWAها هستند که امکان اجرای کدهای جاوااسکریپت در پس‌زمینه مرورگر را فراهم می‌کنند. آن‌ها به توسعه‌دهندگان اجازه می‌دهند تا قابلیت‌های پیشرفته‌ای مانند کش کردن منابع، مدیریت درخواست‌ها و ارسال نوتیفیکیشن‌های پوش را به اپلیکیشن‌های خود اضافه کنند.

ویژگی‌ها و عملکرد Service Workers – آموزش ساخت وب اپلیکیشن با PWA

نصب و ثبت Service Worker: اولین مرحله برای استفاده از Service Worker، نصب و ثبت آن در مرورگر است. این فرآیند معمولاً در فایل اصلی جاوااسکریپت اپلیکیشن انجام می‌شود.

if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js') .then(registration => { console.log('Service Worker registered with scope:', registration.scope); }) .catch(error => { console.log('Service Worker registration failed:', error); }); }

مدیریت کش‌ها (Cache Management): Service Workers می‌توانند منابع اپلیکیشن را در حافظه محلی مرورگر کش کنند. این قابلیت باعث می‌شود اپلیکیشن در حالت آفلاین نیز قابل استفاده باشد.

self.addEventListener('install', event => { event.waitUntil( caches.open('my-cache').then(cache => { return cache.addAll([ '/index.html', '/styles.css', '/script.js', '/images/icon.png' ]); }) ); });

هندل کردن درخواست‌ها (Request Handling): Service Workers می‌توانند درخواست‌های شبکه را کنترل کنند و در صورت نیاز از کش‌ها استفاده کنند.

self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(response => { return response || fetch(event.request); }) ); });

رویدادهای Service Worker: Service Workers دارای رویدادهای مختلفی مانند install، activate و fetch هستند که هرکدام نقش خاصی در عملکرد آن‌ها دارند.

install: هنگامی که Service Worker برای اولین بار نصب می‌شود.

activate: هنگامی که Service Worker فعال می‌شود و آماده به کار است.

fetch: هنگامی که یک درخواست شبکه انجام می‌شود.

Service Workers نقش مهمی در بهبود عملکرد و قابلیت‌های PWAها دارند و به توسعه‌دهندگان امکان می‌دهند تا تجربه کاربری بهتری ارائه دهند.

PWAها با استفاده از این اجزا و فناوری‌های مختلف، تجربه‌ای غنی و مشابه اپلیکیشن‌های بومی را برای کاربران فراهم می‌کنند و امکان استفاده از اپلیکیشن‌ها را در شرایط مختلف (آنلاین و آفلاین) بهبود می‌بخشند.

Web App Manifest – آموزش PWA

Web App Manifest یک فایل JSON است که اطلاعاتی درباره اپلیکیشن وب پیشرفته (PWA) شما فراهم می‌کند. این فایل به مرورگر اجازه می‌دهد تا اپلیکیشن شما را به‌عنوان یک PWA شناسایی کند و امکاناتی مانند افزودن به صفحه اصلی را ارائه دهد. ایجاد و پیکربندی صحیح فایل manifest.json یکی از گام‌های اساسی در توسعه PWA است.

برای ایجاد یک فایل manifest.json، ابتدا یک فایل متنی با همین نام ایجاد کنید و آن را در دایرکتوری اصلی پروژه خود ذخیره کنید. سپس، اطلاعات مورد نیاز را به صورت JSON در این فایل قرار دهید.

ویژگی‌ها و تنظیمات – آموزش ساخت وب اپلیکیشن با PWA

name و short_name

  • name: نام کامل اپلیکیشن که در صفحه اصلی دستگاه و هنگام اجرای اپلیکیشن نمایش داده می‌شود. این نام باید معرف کامل اپلیکیشن شما باشد.jsonCopy code{ "name": "My Progressive Web App" }
  • short_name: نام کوتاه‌تر اپلیکیشن که در فضای محدودتر، مانند صفحه اصلی دستگاه، استفاده می‌شود. این نام باید مختصر و مفید باشد.jsonCopy code{ "short_name": "MyPWA" }

icons

icons: مجموعه‌ای از آیکون‌ها با اندازه‌ها و فرمت‌های مختلف که برای نمایش اپلیکیشن در صفحه اصلی و سایر مکان‌ها استفاده می‌شوند. هر آیکون دارای ویژگی‌هایی مانند src (مسیر فایل)، sizes (اندازه‌های آیکون)، و type (نوع فایل) است.

{ "icons": [ { "src": "/images/icon-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "/images/icon-512x512.png", "sizes": "512x512", "type": "image/png" } ] }

start_url

  • start_url: آدرس URL اولیه که هنگام باز کردن اپلیکیشن از صفحه اصلی استفاده می‌شود. این آدرس باید به صفحه اصلی یا نقطه شروع اپلیکیشن شما اشاره کند.jsonCopy code{ "start_url": "/index.html" }

display

  • display: نحوه نمایش اپلیکیشن را تعیین می‌کند. این ویژگی می‌تواند یکی از مقادیر زیر را داشته باشد:
    • fullscreen: اپلیکیشن به صورت تمام صفحه نمایش داده می‌شود.
    • standalone: اپلیکیشن شبیه به اپلیکیشن‌های بومی اجرا می‌شود، بدون نمایش نوار ابزار مرورگر.
    • minimal-ui: اپلیکیشن با یک نوار ابزار حداقلی نمایش داده می‌شود.
    • browser: اپلیکیشن مانند یک صفحه وب معمولی در مرورگر نمایش داده می‌شود.
    jsonCopy code{ "display": "standalone" }

theme_color و background_color

  • theme_color: رنگ تم اپلیکیشن که برای سفارشی‌سازی نوار ابزار و سایر اجزای رابط کاربری استفاده می‌شود. این ویژگی تجربه کاربری اپلیکیشن شما را بهبود می‌بخشد.jsonCopy code{ "theme_color": "#000000" }
  • background_color: رنگ پس‌زمینه صفحه لودینگ اپلیکیشن که هنگام بارگذاری اولیه نمایش داده می‌شود. این ویژگی باید با رنگ‌های دیگر اپلیکیشن هماهنگ باشد.jsonCopy code{ "background_color": "#ffffff" }

نمونه کامل manifest.json – آموزش PWA

در زیر یک نمونه کامل از فایل manifest.json آورده شده است که شامل تمامی ویژگی‌ها و تنظیمات مهم است:

{  "name": "My Progressive Web App",
  "short_name": "MyPWA",
  "icons": [
    {
      "src": "/images/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/images/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "start_url": "/index.html",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

این فایل manifest.json تمامی اطلاعات لازم را برای شناسایی اپلیکیشن به‌عنوان یک PWA فراهم می‌کند و به مرورگر اجازه می‌دهد تا اپلیکیشن را به‌صورت مناسب نمایش دهد و تجربه کاربری بهتری ارائه دهد.

تنظیم صحیح فایل manifest.json یکی از گام‌های مهم در فرآیند توسعه PWA است و تاثیر قابل‌توجهی بر تجربه کاربری نهایی دارد.

Service Workers – آموزش PWA

Service Workerها اسکریپت‌های جاوااسکریپتی هستند که در پس‌زمینه مرورگر اجرا می‌شوند و به اپلیکیشن‌های وب اجازه می‌دهند تا عملکردهای پیشرفته‌ای مانند کشینگ، همگام‌سازی پس‌زمینه و نوتیفیکیشن‌های پوش را ارائه دهند. آن‌ها واسطی بین اپلیکیشن و شبکه هستند و به توسعه‌دهندگان امکان می‌دهند تا کنترل بیشتری بر نحوه اجرای درخواست‌ها و ذخیره‌سازی منابع داشته باشند.

نصب و ثبت Service Worker – آموزش ساخت وب اپلیکیشن با PWA

برای استفاده از Service Worker، ابتدا باید آن را در اپلیکیشن خود ثبت کنید. این کار معمولاً در فایل اصلی جاوااسکریپت اپلیکیشن انجام می‌شود:

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(registration => {
      console.log('Service Worker registered with scope:', registration.scope);
    })
    .catch(error => {
      console.log('Service Worker registration failed:', error);
    });
}

در این کد، ابتدا بررسی می‌شود که آیا مرورگر از Service Worker پشتیبانی می‌کند یا نه. سپس فایل service-worker.js ثبت می‌شود.

مدیریت کش‌ها (Cache Management)

یکی از مهم‌ترین وظایف Service Workerها مدیریت کش‌ها است. با کش کردن منابع، می‌توان اپلیکیشن را در حالت آفلاین قابل استفاده کرد و زمان بارگذاری را کاهش داد. برای مدیریت کش‌ها از API Cache استفاده می‌شود.

در رویداد install، می‌توان منابع مورد نیاز را کش کرد:

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open('my-cache').then(cache => {
      return cache.addAll([
        '/index.html',
        '/styles.css',
        '/script.js',
        '/images/icon.png'
      ]);
    })
  );
});

استراتژی‌های کش (Caching Strategies) آموزش ساخت وب اپلیکیشن با PWA

استراتژی‌های مختلفی برای کش کردن منابع وجود دارد که بسته به نوع اپلیکیشن و نیازهای آن می‌توان یکی از آن‌ها را انتخاب کرد:

در این استراتژی، ابتدا سعی می‌شود که منبع از کش دریافت شود و اگر موجود نبود، از شبکه درخواست می‌شود.

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

در این استراتژی، ابتدا سعی می‌شود که منبع از شبکه دریافت شود و اگر شبکه در دسترس نبود، از کش استفاده می‌شود.

self.addEventListener('fetch', event => {
  event.respondWith(
    fetch(event.request).catch(() => {
      return caches.match(event.request);
    })
  );
});

در این استراتژی، فقط از کش استفاده می‌شود و هیچ درخواستی به شبکه ارسال نمی‌شود.

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
  );
});

در این استراتژی، فقط از شبکه استفاده می‌شود و هیچ منبعی کش نمی‌شود.

self.addEventListener('fetch', event => {
  event.respondWith(
    fetch(event.request)
  );
});

هندل کردن درخواست‌ها (Request Handling)

Service Workerها می‌توانند درخواست‌های شبکه را مدیریت کنند و پاسخ‌های سفارشی ارائه دهند. این قابلیت به توسعه‌دهندگان امکان می‌دهد تا رفتار اپلیکیشن را در حالت‌های مختلف (آنلاین و آفلاین) کنترل کنند.

رویدادهای Service Worker – آموزش PWA

رویداد install زمانی فعال می‌شود که Service Worker برای اولین بار نصب می‌شود. این رویداد معمولاً برای کش کردن منابع اولیه استفاده می‌شود.

self.addEventListener('install', event => {
  console.log('Service Worker installing.');
});

رویداد activate زمانی فعال می‌شود که Service Worker فعال و آماده به کار می‌شود. این رویداد معمولاً برای پاک کردن کش‌های قدیمی و آماده‌سازی محیط استفاده می‌شود.

self.addEventListener('activate', event => {
  console.log('Service Worker activating.');
});

رویداد fetch هر بار که یک درخواست شبکه از صفحه وب ارسال می‌شود، فعال می‌شود. این رویداد برای مدیریت و هندل کردن درخواست‌ها و ارائه پاسخ‌های سفارشی استفاده می‌شود.

self.addEventListener('fetch', event => {
  console.log('Fetching:', event.request.url);
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

Service Workerها با ارائه امکانات پیشرفته و کنترل بیشتر بر درخواست‌ها و کش‌ها، نقش بسیار مهمی در بهبود عملکرد و تجربه کاربری PWAها ایفا می‌کنند. تنظیم و پیکربندی صحیح Service Workerها می‌تواند تاثیر قابل‌توجهی بر کارایی و قابلیت‌های اپلیکیشن داشته باشد.

Offline First Approach – آموزش PWA

در دنیای امروز، کاربران انتظار دارند که اپلیکیشن‌های وب بدون توجه به وضعیت اتصال به اینترنت، تجربه کاربری خوبی ارائه دهند. رویکرد Offline First به توسعه‌دهندگان کمک می‌کند تا اپلیکیشن‌های خود را به گونه‌ای طراحی کنند که حتی در حالت آفلاین نیز عملکرد مناسبی داشته باشند. این رویکرد شامل کش کردن منابع ضروری، مدیریت داده‌ها به صورت محلی و همگام‌سازی آن‌ها هنگام اتصال به اینترنت است.

کش کردن منابع ضروری – آموزش ساخت وب اپلیکیشن با PWA

برای ایجاد یک تجربه کاربری آفلاین، ابتدا باید منابع ضروری اپلیکیشن مانند HTML، CSS، JavaScript و تصاویر را کش کنید. این کار با استفاده از Service Worker و Cache API انجام می‌شود.

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open('offline-cache').then(cache => {
      return cache.addAll([
        '/index.html',
        '/styles.css',
        '/script.js',
        '/images/logo.png'
      ]);
    })
  );
});

ارائه پاسخ‌های کش شده

هنگام درخواست منابع توسط کاربر، Service Worker ابتدا سعی می‌کند که این منابع را از کش ارائه دهد. اگر منابع در کش موجود نبود، درخواست به شبکه ارسال می‌شود.

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

ذخیره داده‌ها با استفاده از IndexedDB – آموزش PWA

IndexedDB یک پایگاه داده NoSQL در مرورگر است که امکان ذخیره‌سازی داده‌های ساختاریافته به صورت محلی را فراهم می‌کند. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا داده‌های کاربران را حتی در حالت آفلاین ذخیره و مدیریت کنند.

ایجاد پایگاه داده

برای استفاده از IndexedDB، ابتدا باید یک پایگاه داده ایجاد کنید و ساختار آن را تعریف کنید.

let db;
const request = indexedDB.open('myDatabase', 1);

request.onupgradeneeded = event => {
  db = event.target.result;
  db.createObjectStore('myObjectStore', { keyPath: 'id' });
};

request.onsuccess = event => {
  db = event.target.result;
};

request.onerror = event => {
  console.error('Database error:', event.target.errorCode);
};

افزودن داده‌ها به IndexedDB

برای افزودن داده‌ها به IndexedDB، از متد add استفاده می‌شود.

function addData(data) {
  const transaction = db.transaction(['myObjectStore'], 'readwrite');
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.add(data);

  request.onsuccess = () => {
    console.log('Data added to IndexedDB');
  };

  request.onerror = event => {
    console.error('Error adding data:', event.target.errorCode);
  };
}

const data = { id: 1, name: 'John Doe', age: 30 };
addData(data);

خواندن داده‌ها از IndexedDB

برای خواندن داده‌ها از IndexedDB، از متد get استفاده می‌شود.

function getData(id) {
  const transaction = db.transaction(['myObjectStore']);
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.get(id);

  request.onsuccess = event => {
    console.log('Data retrieved from IndexedDB:', event.target.result);
  };

  request.onerror = event => {
    console.error('Error retrieving data:', event.target.errorCode);
  };
}

getData(1);

مدیریت و همگام‌سازی داده‌ها – آموزش ساخت وب اپلیکیشن با PWA

برای حفظ هماهنگی داده‌ها بین حالت آفلاین و آنلاین، باید مکانیزمی برای همگام‌سازی داده‌ها هنگام اتصال به اینترنت فراهم شود. این کار معمولاً با استفاده از Service Worker و Background Sync API انجام می‌شود.

ذخیره داده‌ها در حالت آفلاین

هنگام عدم دسترسی به اینترنت، داده‌های ورودی کاربران باید به صورت محلی ذخیره شوند تا در زمان اتصال به اینترنت همگام‌سازی شوند.

self.addEventListener('sync', event => {
  if (event.tag === 'sync-data') {
    event.waitUntil(syncData());
  }
});

function syncData() {
  // خواندن داده‌های محلی از IndexedDB
  // ارسال داده‌ها به سرور
  return fetch('/api/sync', {
    method: 'POST',
    body: JSON.stringify(localData),
    headers: {
      'Content-Type': 'application/json'
    }
  }).then(response => {
    return response.json();
  }).then(data => {
    console.log('Data synced:', data);
  }).catch(error => {
    console.error('Sync failed:', error);
  });
}

استفاده از Background Sync

Background Sync API به اپلیکیشن‌ها اجازه می‌دهد تا در زمان اتصال به اینترنت، عملیات‌های پس‌زمینه‌ای مانند ارسال داده‌ها به سرور را انجام دهند.

navigator.serviceWorker.ready.then(registration => {
  return registration.sync.register('sync-data');
}).then(() => {
  console.log('Sync registered');
}).catch(error => {
  console.error('Sync registration failed:', error);
});

رویکرد Offline First به توسعه‌دهندگان اجازه می‌دهد تا اپلیکیشن‌هایی بسازند که حتی در حالت آفلاین نیز به خوبی عمل کنند. با استفاده از Service Worker، Cache API، IndexedDB و Background Sync، می‌توان تجربه کاربری بهتری را برای کاربران فراهم کرد و داده‌ها را به صورت هماهنگ و بهینه مدیریت نمود. این رویکرد نه تنها کارایی اپلیکیشن را افزایش می‌دهد، بلکه باعث افزایش رضایت کاربران نیز می‌شود.

نوتیفیکیشن‌های پوش (Push Notifications) – آموزش PWA

Push API یکی از قابلیت‌های جدید مرورگرها است که امکان ارسال نوتیفیکیشن‌های پوش به کاربران را فراهم می‌کند. با استفاده از Push API، سرور می‌تواند نوتیفیکیشن‌ها را به مرورگر ارسال کند، حتی زمانی که اپلیکیشن وب بسته است. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا با کاربران خود در تعامل باشند و اطلاعات مهم را به آن‌ها ارسال کنند.

ثبت و مدیریت اشتراک‌های Push

برای استفاده از Push API، ابتدا باید کاربران را به اشتراک پوش نوتیفیکیشن‌ها درآورید. این فرآیند شامل درخواست مجوز از کاربر و ثبت یک اشتراک در Service Worker است.

درخواست مجوز از کاربر

ابتدا باید از کاربر درخواست مجوز برای ارسال نوتیفیکیشن‌ها کنید.

Notification.requestPermission().then(permission => {
  if (permission === 'granted') {
    console.log('Notification permission granted.');
    subscribeUserToPush();
  } else {
    console.log('Notification permission denied.');
  }
});

ثبت اشتراک در Service Worker

پس از دریافت مجوز، می‌توان کاربر را به اشتراک پوش نوتیفیکیشن‌ها درآورد. این کار با استفاده از PushManager انجام می‌شود.

function subscribeUserToPush() {
  navigator.serviceWorker.ready.then(registration => {
    return registration.pushManager.subscribe({
      userVisibleOnly: true,
      applicationServerKey: urlBase64ToUint8Array('<Your Public VAPID Key>')
    }).then(subscription => {
      console.log('User is subscribed:', subscription);
      // ارسال اطلاعات اشتراک به سرور
    }).catch(error => {
      console.error('Failed to subscribe the user:', error);
    });
  });
}

function urlBase64ToUint8Array(base64String) {
  const padding = '='.repeat((4 - base64String.length % 4) % 4);
  const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
  const rawData = window.atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }

  return outputArray;
}

ارسال و دریافت نوتیفیکیشن‌های پوش – آموزش ساخت وب اپلیکیشن با PWA

برای ارسال نوتیفیکیشن‌ها، سرور باید اطلاعات اشتراک کاربر را دریافت کرده و از Push Service استفاده کند. معمولاً این کار با استفاده از یک کتابخانه مانند web-push انجام می‌شود.

const webPush = require('web-push');

const vapidKeys = {
  publicKey: '<Your Public VAPID Key>',
  privateKey: '<Your Private VAPID Key>'
};

webPush.setVapidDetails(
  'mailto:<Your Email>',
  vapidKeys.publicKey,
  vapidKeys.privateKey
);

const pushSubscription = {
  endpoint: '<User Endpoint>',
  keys: {
    p256dh: '<User p256dh Key>',
    auth: '<User Auth Key>'
  }
};

const payload = JSON.stringify({
  title: 'Hello!',
  body: 'You have a new notification.',
  icon: '/images/icon.png'
});

webPush.sendNotification(pushSubscription, payload).catch(error => {
  console.error('Error sending notification:', error);
});

دریافت و نمایش نوتیفیکیشن‌ها در Service Worker

Service Worker مسئول دریافت و نمایش نوتیفیکیشن‌ها در سمت کلاینت است.

self.addEventListener('push', event => {
  const data = event.data.json();
  const options = {
    body: data.body,
    icon: data.icon,
    badge: data.badge
  };

  event.waitUntil(
    self.registration.showNotification(data.title, options)
  );
});

نمونه کامل از ثبت و ارسال نوتیفیکیشن – آموزش PWA

در زیر نمونه کامل از فرآیند ثبت اشتراک و ارسال نوتیفیکیشن آورده شده است.

فایل main.js

Notification.requestPermission().then(permission => {
  if (permission === 'granted') {
    navigator.serviceWorker.ready.then(registration => {
      return registration.pushManager.subscribe({
        userVisibleOnly: true,
        applicationServerKey: urlBase64ToUint8Array('<Your Public VAPID Key>')
      }).then(subscription => {
        console.log('User is subscribed:', subscription);
        // ارسال اطلاعات اشتراک به سرور
      }).catch(error => {
        console.error('Failed to subscribe the user:', error);
      });
    });
  }
});

function urlBase64ToUint8Array(base64String) {
  const padding = '='.repeat((4 - base64String.length % 4) % 4);
  const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
  const rawData = window.atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }

  return outputArray;
}

فایل service-worker.js – آموزش ساخت وب اپلیکیشن با PWA

self.addEventListener('push', event => {
  const data = event.data.json();
  const options = {
    body: data.body,
    icon: data.icon,
    badge: data.badge
  };

  event.waitUntil(
    self.registration.showNotification(data.title, options)
  );
});

فایل سرور (مثال Node.js) – آموزش PWA

const webPush = require('web-push');

const vapidKeys = {
  publicKey: '<Your Public VAPID Key>',
  privateKey: '<Your Private VAPID Key>'
};

webPush.setVapidDetails(
  'mailto:<Your Email>',
  vapidKeys.publicKey,
  vapidKeys.privateKey
);

const pushSubscription = {
  endpoint: '<User Endpoint>',
  keys: {
    p256dh: '<User p256dh Key>',
    auth: '<User Auth Key>'
  }
};

const payload = JSON.stringify({
  title: 'Hello!',
  body: 'You have a new notification.',
  icon: '/images/icon.png'
});

webPush.sendNotification(pushSubscription, payload).catch(error => {
  console.error('Error sending notification:', error);
});

نوتیفیکیشن‌های پوش یک ابزار قدرتمند برای تعامل با کاربران است که به اپلیکیشن‌ها اجازه می‌دهد تا حتی در صورت بسته بودن مرورگر نیز اطلاعات مهم را به کاربران ارسال کنند. با استفاده از Push API، Service Worker و کتابخانه‌هایی مانند web-push، می‌توان فرآیند ارسال و دریافت نوتیفیکیشن‌های پوش را به راحتی مدیریت کرد. این قابلیت به توسعه‌دهندگان کمک می‌کند تا تجربه کاربری بهتری ارائه دهند و کاربران خود را به صورت موثرتر درگیر کنند.

پرفورمنس و بهینه‌سازی PWA – آموزش PWA

عملکرد اپلیکیشن یکی از مهم‌ترین عوامل موفقیت یک PWA است. بهینه‌سازی عملکرد شامل بهبود سرعت بارگذاری، کاهش زمان پاسخ‌دهی و افزایش کارایی کلی اپلیکیشن است. در ادامه به برخی از راهکارهای بهینه‌سازی عملکرد اپلیکیشن‌های PWA پرداخته می‌شود:

1- کاهش درخواست‌های HTTP

کاهش تعداد درخواست‌های HTTP می‌تواند بهبود چشمگیری در زمان بارگذاری اپلیکیشن ایجاد کند. این کار از طریق ترکیب و فشرده‌سازی فایل‌های CSS و JavaScript، استفاده از تصاویر با فرمت‌های بهینه و کش کردن منابع انجام می‌شود.

2- استفاده از تکنیک‌های Lazy Loading

تکنیک‌های Lazy Loading به بارگذاری تدریجی محتوا کمک می‌کنند. به این صورت که محتوا تنها زمانی بارگذاری می‌شود که کاربر به آن نیاز دارد. این تکنیک می‌تواند به بهبود زمان بارگذاری اولیه اپلیکیشن کمک کند.

// مثال ساده از Lazy Loading تصاویر
const images = document.querySelectorAll('img[data-src]');
const config = {
  rootMargin: '0px 0px 50px 0px',
  threshold: 0
};

let observer = new IntersectionObserver((entries, self) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      preloadImage(entry.target);
      self.unobserve(entry.target);
    }
  });
}, config);

images.forEach(image => {
  observer.observe(image);
});

function preloadImage(img) {
  const src = img.getAttribute('data-src');
  if (!src) {
    return;
  }
  img.src = src;
}

3- استفاده از Web Workers – آموزش ساخت وب اپلیکیشن با PWA

Web Workers به شما اجازه می‌دهند تا کد JavaScript را در پس‌زمینه و جدا از نخ اصلی اجرا کنید. این ویژگی می‌تواند به بهبود عملکرد اپلیکیشن کمک کند، زیرا عملیات‌های سنگین به نخ اصلی تاثیر نمی‌گذارند.

// ایجاد یک Web Worker
const worker = new Worker('worker.js');

worker.onmessage = function(event) {
  console.log('Message received from worker:', event.data);
};

worker.postMessage('Hello, worker!');

4- بهینه‌سازی کش

استفاده بهینه از کش می‌تواند تاثیر چشمگیری بر عملکرد اپلیکیشن داشته باشد. با استفاده از Service Workerها می‌توان منابع را به صورت بهینه کش کرد و در بارگذاری‌های بعدی به سرعت آن‌ها را بازیابی کرد.

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open('my-cache').then(cache => {
      return cache.addAll([
        '/index.html',
        '/styles.css',
        '/script.js',
        '/images/logo.png'
      ]);
    })
  );
});

5- استفاده از Lighthouse برای ارزیابی و بهبود PWA

Lighthouse یک ابزار منبع‌باز گوگل است که به توسعه‌دهندگان کمک می‌کند تا عملکرد، دسترس‌پذیری، و بهینه‌سازی PWAهای خود را ارزیابی کنند. این ابزار گزارش‌های جامعی ارائه می‌دهد که نقاط قوت و ضعف اپلیکیشن را نشان می‌دهد.

اجرای Lighthouse

برای اجرای Lighthouse، می‌توانید از DevTools مرورگر کروم استفاده کنید. به تب Audits بروید، تنظیمات مورد نظر خود را انتخاب کنید و بر روی “Run Audits” کلیک کنید.

تحلیل نتایج

Lighthouse نتایج ارزیابی را در قالب یک گزارش ارائه می‌دهد که شامل بخش‌های مختلفی مانند Performance، Accessibility، Best Practices، SEO و Progressive Web App است. هر بخش شامل نمرات و پیشنهادات بهبود است.

6- بهینه‌سازی تصاویر و منابع – آموزش ساخت وب اپلیکیشن با PWA

تصاویر و منابع بزرگ می‌توانند زمان بارگذاری اپلیکیشن را به شدت تحت تاثیر قرار دهند. بهینه‌سازی این منابع می‌تواند به بهبود عملکرد کلی اپلیکیشن کمک کند.

فشرده‌سازی تصاویر

استفاده از ابزارهای فشرده‌سازی تصویر مانند ImageOptim، TinyPNG و JPEGoptim می‌تواند حجم تصاویر را بدون افت کیفیت کاهش دهد.

استفاده از فرمت‌های بهینه

فرمت‌های جدیدتر مانند WebP می‌توانند تصاویر را با حجم کمتری و کیفیت مشابه نسبت به فرمت‌های قدیمی‌تر مانند JPEG و PNG ارائه دهند.

<!-- استفاده از فرمت WebP -->
<picture>
  <source srcset="image.webp" type="image/webp">
  <source srcset="image.jpg" type="image/jpeg">
  <img src="image.jpg" alt="Example Image">
</picture>

7- بارگذاری منابع به صورت غیرهم‌زمان – آموزش ساخت وب اپلیکیشن با PWA

بارگذاری غیرهم‌زمان فایل‌های JavaScript و CSS می‌تواند زمان بارگذاری اولیه را کاهش دهد.

<!-- بارگذاری غیرهم‌زمان CSS -->
<link rel="stylesheet" href="styles.css" media="print" onload="this.media='all'">

<!-- بارگذاری غیرهم‌زمان JavaScript -->
<script src="script.js" async></script>

8- استفاده از CDN

استفاده از شبکه‌های توزیع محتوا (CDN) می‌تواند سرعت دسترسی به منابع را بهبود بخشد، زیرا این شبکه‌ها منابع را از نزدیک‌ترین سرور به کاربر ارائه می‌دهند.

بهینه‌سازی عملکرد PWAها نقش حیاتی در ارائه تجربه کاربری برتر دارد. با استفاده از تکنیک‌های بهینه‌سازی عملکرد، ارزیابی و بهبود اپلیکیشن با Lighthouse و بهینه‌سازی تصاویر و منابع، می‌توان اطمینان حاصل کرد که اپلیکیشن‌های وب پیشرفته (PWA) سریع، کارآمد و کاربرپسند هستند. این اقدامات نه تنها به افزایش رضایت کاربران کمک می‌کنند، بلکه به بهبود SEO و رتبه‌بندی در موتورهای جستجو نیز منجر می‌شوند.

افزودن به صفحه اصلی (Add to Home Screen) – آموزش PWA

یکی از ویژگی‌های بارز PWAها امکان افزودن آن‌ها به صفحه اصلی دستگاه‌های کاربران است. این ویژگی به کاربران اجازه می‌دهد تا با یک کلیک اپلیکیشن را به صفحه اصلی خود اضافه کنند و به مانند یک اپلیکیشن بومی (Native App) از آن استفاده کنند. برای نمایش پنجره نصب (Install Prompt)، PWA باید شرایط و الزامات خاصی را رعایت کند:

شرایط و الزامات برای نمایش پنجره نصب (Install Prompt)

HTTPS:

PWA باید از طریق پروتکل HTTPS ارائه شود تا امنیت کاربر تضمین شود.

Web App Manifest:

فایل manifest.json باید به درستی پیکربندی شده باشد و شامل ویژگی‌های لازم مانند name, short_name, start_url, display, icons باشد.

Service Worker:

یک Service Worker باید ثبت شده باشد و قابلیت‌های آن فعال باشد.

کاربر تعامل مثبت:

کاربر باید حداقل یک تعامل مثبت با اپلیکیشن داشته باشد (مانند بازدید از چند صفحه یا انجام یک عمل مشخص).

مثال از فایل manifest.json – آموزش ساخت وب اپلیکیشن با PWA

{
  "name": "My PWA",
  "short_name": "PWA",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#000000",
  "icons": [
    {
      "src": "/images/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/images/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

نمایش پنجره نصب – آموزش PWA

مرورگر پس از بررسی شرایط بالا، رویداد beforeinstallprompt را اجرا می‌کند. با استفاده از این رویداد، می‌توانید پنجره نصب را به کاربر نشان دهید.

let deferredPrompt;

window.addEventListener('beforeinstallprompt', (e) => {
  e.preventDefault();
  deferredPrompt = e;
  showInstallPromotion(); // نمایش پنجره نصب
});

function showInstallPromotion() {
  const installButton = document.getElementById('install-button');
  installButton.style.display = 'block';

  installButton.addEventListener('click', () => {
    installButton.style.display = 'none';
    deferredPrompt.prompt();
    deferredPrompt.userChoice.then((choiceResult) => {
      if (choiceResult.outcome === 'accepted') {
        console.log('User accepted the install prompt');
      } else {
        console.log('User dismissed the install prompt');
      }
      deferredPrompt = null;
    });
  });
}

سفارشی‌سازی رفتار نصب PWA – آموزش ساخت وب اپلیکیشن با PWA

می‌توانید رفتار نصب PWA را بر اساس نیازهای خود سفارشی‌سازی کنید تا تجربه بهتری برای کاربران فراهم شود. این سفارشی‌سازی‌ها می‌توانند شامل طراحی و نمایش پنجره نصب، زمان‌بندی نمایش و پیگیری نصب باشند.

سفارشی‌سازی طراحی پنجره نصب – آموزش PWA

می‌توانید پنجره نصب را به دلخواه طراحی کنید تا با ظاهر و حس اپلیکیشن شما هماهنگ باشد. این کار می‌تواند شامل استفاده از CSS برای سفارشی‌سازی دکمه‌ها و متن‌ها باشد.

<!-- HTML -->
<div id="install-container" style="display: none;">
  <p>Install our app for a better experience!</p>
  <button id="install-button">Install</button>
</div>
/* CSS */
#install-container {
  background-color: #f9f9f9;
  border: 1px solid #ccc;
  padding: 10px;
  position: fixed;
  bottom: 10px;
  width: 100%;
  text-align: center;
}

#install-button {
  background-color: #4CAF50;
  color: white;
  border: none;
  padding: 10px 20px;
  cursor: pointer;
}

#install-button:hover {
  background-color: #45a049;
}

زمان‌بندی نمایش پنجره نصب

می‌توانید زمان‌بندی نمایش پنجره نصب را بر اساس تعاملات کاربر تعیین کنید. به عنوان مثال، می‌توانید پنجره نصب را پس از بازدید کاربر از چندین صفحه یا انجام یک عمل خاص نمایش دهید.

let visitCount = 0;

window.addEventListener('load', () => {
  visitCount = parseInt(localStorage.getItem('visitCount')) || 0;
  visitCount++;
  localStorage.setItem('visitCount', visitCount);

  if (visitCount >= 3 && deferredPrompt) {
    showInstallPromotion();
  }
});

پیگیری نصب – آموزش PWA

می‌توانید پیگیری کنید که آیا کاربر اپلیکیشن را نصب کرده است یا خیر و بر اساس آن رفتار اپلیکیشن را تغییر دهید.

window.addEventListener('appinstalled', () => {
  console.log('PWA was installed');
  hideInstallPromotion(); // مخفی کردن پنجره نصب پس از نصب
});

function hideInstallPromotion() {
  const installContainer = document.getElementById('install-container');
  installContainer.style.display = 'none';
}

افزودن اپلیکیشن به صفحه اصلی کاربران یکی از قابلیت‌های مهم PWAها است که تجربه کاربری بهتری را فراهم می‌کند. با رعایت شرایط و الزامات لازم، می‌توانید پنجره نصب را به کاربران نشان دهید و با سفارشی‌سازی رفتار نصب، تجربه‌ای بهینه و متناسب با نیازهای کاربران ارائه دهید. این قابلیت نه تنها کارایی اپلیکیشن را افزایش می‌دهد، بلکه به کاربران امکان می‌دهد به راحتی و سریع‌تر به اپلیکیشن دسترسی داشته باشند.

امنیت در PWA – آموزش ساخت وب اپلیکیشن با PWA

امنیت یکی از جنبه‌های کلیدی در توسعه PWAها است که باید به آن توجه ویژه‌ای داشت. به دلیل اینکه PWAها به کاربران تجربه‌ای شبیه به اپلیکیشن‌های بومی ارائه می‌دهند، باید اقدامات امنیتی مناسب را برای حفاظت از داده‌ها و کاربران به کار برد. در این مقاله به بررسی جنبه‌های مختلف امنیت در PWAها شامل استفاده از HTTPS، مدیریت محتوای امن و جلوگیری از حملات CSRF و XSS پرداخته می‌شود.

1- استفاده از HTTPS

HTTPS (Hypertext Transfer Protocol Secure) یک پروتکل امن برای تبادل داده‌ها بین مرورگر و سرور است. استفاده از HTTPS یکی از الزامات اصلی برای PWAها است و بسیاری از ویژگی‌های امنیتی اپلیکیشن‌های وب، از جمله PWAها، به آن وابسته است.

اهمیت HTTPS در PWAها

رمزنگاری داده‌ها: HTTPS از رمزنگاری TLS (Transport Layer Security) برای محافظت از داده‌های بین مرورگر و سرور استفاده می‌کند. این رمزنگاری به جلوگیری از شنود داده‌ها و حملات مرد میانه (Man-in-the-Middle Attacks) کمک می‌کند.

احراز هویت: HTTPS به کاربران این اطمینان را می‌دهد که به سایت مورد نظر خود متصل هستند و نه به یک سایت تقلبی.

فعال‌سازی ویژگی‌های PWA: ویژگی‌هایی مانند Service Worker و Web App Manifest تنها زمانی فعال می‌شوند که سایت از طریق HTTPS بارگذاری شده باشد.

نحوه فعال‌سازی HTTPS – آموزش PWA

برای فعال‌سازی HTTPS، باید یک گواهی SSL/TLS از یک CA (Certification Authority) معتبر تهیه کنید و آن را بر روی سرور خود نصب کنید. اکثر خدمات میزبانی و ارائه‌دهندگان دامنه این امکان را به صورت رایگان یا با هزینه‌ای کم فراهم می‌کنند.

# درخواست گواهی SSL با استفاده از Certbot
certbot --nginx

2- مدیریت محتوای امن

مدیریت محتوای امن به معنای اطمینان از این است که اپلیکیشن شما از لحاظ امنیتی در برابر تهدیدات محتوا مقاوم باشد. این شامل استفاده از هدرهای امنیتی، محدود کردن دسترسی به منابع و بررسی ورودی‌های کاربر است.

3- استفاده از هدرهای امنیتی

هدرهای امنیتی HTTP به شما کمک می‌کنند تا سطح امنیت اپلیکیشن وب خود را افزایش دهید. این هدرها می‌توانند به جلوگیری از حملات مختلف کمک کنند.

# هدرهای امنیتی HTTP
Content-Security-Policy: default-src 'self';
X-Content-Type-Options: nosniff;
X-Frame-Options: DENY;
X-XSS-Protection: 1; mode=block;
Strict-Transport-Security: max-age=31536000; includeSubDomains;

Content-Security-Policy (CSP):

برای جلوگیری از بارگذاری محتوای غیرمجاز از منابع غیرمعتبر استفاده می‌شود.

Content-Security-Policy: default-src 'self';

X-Content-Type-Options: جلوگیری از تغییر نوع محتوا.

X-Content-Type-Options: nosniff;

X-Frame-Options: جلوگیری از درج صفحات شما در فریم‌های دیگر وب‌سایت‌ها.

X-Frame-Options: DENY;

X-XSS-Protection: فعال‌سازی حفاظت از XSS.

X-XSS-Protection: 1; mode=block;

Strict-Transport-Security: اجبار به استفاده از HTTPS.

Strict-Transport-Security: max-age=31536000; includeSubDomains;

4- محدود کردن دسترسی به منابع:

محدود کردن دسترسی به منابع حساس از طریق تنظیمات مناسب و احراز هویت می‌تواند امنیت اپلیکیشن شما را تقویت کند.

// نمونه‌ای از محدود کردن دسترسی به منابع
app.use('/admin', authenticateAdmin);

5- بررسی ورودی‌های کاربر

اطمینان حاصل کنید که ورودی‌های کاربر به درستی اعتبارسنجی و تصفیه می‌شوند تا از حملات مخرب جلوگیری شود.

// بررسی ورودی‌های کاربر با استفاده از express-validator
const { body, validationResult } = require('express-validator');

app.post('/submit', [
  body('email').isEmail(),
  body('password').isLength({ min: 6 })
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  // پردازش ورودی‌های معتبر
});

6- جلوگیری از حملات CSRF و XSS

حملات CSRF (Cross-Site Request Forgery) و XSS (Cross-Site Scripting) از جمله حملات متداول در اپلیکیشن‌های وب هستند. در این بخش به بررسی روش‌های جلوگیری از این حملات پرداخته می‌شود.

7- جلوگیری از حملات CSRF

حملات CSRF به حملات متقلبانه‌ای اطلاق می‌شود که در آن یک کاربر به طور ناخواسته درخواست‌هایی به سایت مورد نظر ارسال می‌کند. برای جلوگیری از این حملات می‌توان از توکن‌های CSRF استفاده کرد.

// تولید و اعتبارسنجی توکن CSRF
const csrf = require('csurf');
app.use(csrf({ cookie: true }));

app.get('/form', (req, res) => {
  res.render('form', { csrfToken: req.csrfToken() });
});

8- جلوگیری از حملات XSS

حملات XSS زمانی اتفاق می‌افتد که مهاجم کدهای مخرب را به اپلیکیشن وب وارد می‌کند. برای جلوگیری از این حملات می‌توان از روش‌های زیر استفاده کرد:

تصفیه ورودی‌های کاربر: مطمئن شوید که ورودی‌های کاربر به درستی تصفیه می‌شوند و کدهای مخرب از آن‌ها حذف می‌شود.

// استفاده از library‌هایی مثل DOMPurify برای تصفیه داده‌ها const DOMPurify = require('dompurify'); const cleanHTML = DOMPurify.sanitize(dirtyHTML);

اجتناب از اجرای کدهای JavaScript غیرمعتبر: مطمئن شوید که داده‌های ورودی کاربر به طور مستقیم به DOM اضافه نمی‌شوند.

// نمونه‌ای از اضافه نکردن داده‌های کاربر به DOM بدون تصفیه const userInput = '<script>alert("XSS")</script>'; document.getElementById('content').textContent = userInput;

امنیت در PWAها موضوعی پیچیده و مهم است که باید به دقت به آن پرداخته شود. با استفاده از HTTPS، مدیریت محتوای امن و جلوگیری از حملات CSRF و XSS می‌توان از امنیت اپلیکیشن‌های وب پیشرفته (PWA) اطمینان حاصل کرد. این اقدامات به حفاظت از داده‌های کاربران و جلوگیری از حملات امنیتی کمک می‌کنند و باعث ایجاد یک تجربه کاربری امن و قابل اعتماد می‌شوند.

منابع آموزش PWA – آموزش ساخت وب اپلیکیشن با PWA

  • OWASP – Web Security Testing Guide
  • MDN Web Docs – HTTP Security Headers
  • Google Developers – Progressive Web Apps

منابع مورد استفاده در کدها و مثال‌ها

  • Mozilla Developer Network (MDN) Web Docs
  • Google Developers
  • OWASP Foundation

مثال‌های تکمیلی

برای کسب اطلاعات بیشتر و پیاده‌سازی‌های خاص، می‌توانید به مستندات زیر مراجعه کنید:

  • CSRF Protection with CSRF Tokens
  • Preventing Cross-Site Scripting (XSS)
  • Using HTTPS

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

تست و دیباگ PWA – آموزش PWA

تست و دیباگ یک اپلیکیشن وب پیشرفته (PWA) بخش حیاتی از فرآیند توسعه است که به شما کمک می‌کند تا اطمینان حاصل کنید که اپلیکیشن شما به درستی عمل می‌کند و به نیازهای کاربران پاسخ می‌دهد. در این مقاله به بررسی ابزارها و روش‌های تست و دیباگ PWAها پرداخته می‌شود. این ابزارها شامل Chrome DevTools و Lighthouse هستند و روش‌های مختلف تست عملکرد و قابلیت‌ها نیز مورد بررسی قرار می‌گیرد.

ابزارهای تست و دیباگ PWA

Chrome DevTools مجموعه‌ای از ابزارهای قدرتمند است که به توسعه‌دهندگان کمک می‌کند تا اپلیکیشن‌های وب را تست و دیباگ کنند. این ابزارها به ویژه برای تست و دیباگ PWAها مفید هستند.

ویژگی‌های کلیدی Chrome DevTools برای PWA

پنل Application در DevTools ابزارهای مختلفی را برای مشاهده و مدیریت منابع PWA فراهم می‌کند.

مشاهده و مدیریت Web App Manifest

می‌توانید محتویات فایل manifest.json را مشاهده کنید و بررسی کنید که تمام ویژگی‌های مورد نیاز به درستی تنظیم شده است.

DevTools > Application > Manifest

مدیریت Service Workerها

می‌توانید وضعیت Service Worker را مشاهده کنید، آن‌ها را نصب یا حذف کنید و کش‌ها را بررسی کنید.

DevTools > Application > Service Workers

بررسی Cache Storage

برای بررسی محتوای کش‌ها و مدیریت آن‌ها می‌توانید از این بخش استفاده کنید.

DevTools > Application > Cache Storage

پنل Network

پنل Network به شما امکان می‌دهد تا درخواست‌های شبکه را مشاهده و تحلیل کنید.

بررسی زمان بارگذاری

می‌توانید زمان بارگذاری هر منبع را بررسی کنید و ببینید که آیا منابع به درستی از کش بارگذاری می‌شوند یا نه.

DevTools > Network

مدیریت وضعیت درخواست‌ها

شما می‌توانید درخواست‌ها را مشاهده کنید و وضعیت پاسخ‌ها را بررسی کنید.

پنل Performance

پنل Performance برای تجزیه و تحلیل عملکرد اپلیکیشن شما طراحی شده است.

ضبط و تحلیل فریم‌ها و زمان بارگذاری

این ابزار به شما کمک می‌کند تا مشکلات عملکردی مانند زمان بارگذاری طولانی یا مشکلات در فریم‌بندی را شناسایی کنید.

DevTools > Performance

پنل Console

پنل Console برای مشاهده خطاها و پیغام‌های مختلف استفاده می‌شود.

مشاهده خطاها و هشدارها

خطاها و هشدارهای مرتبط با JavaScript و Service Workerها در این بخش نمایش داده می‌شوند.

DevTools > Console

پنل Security

پنل Security برای بررسی مسائل امنیتی مانند HTTPS و گواهی‌های SSL/TLS استفاده می‌شود.

بررسی وضعیت HTTPS و گواهی‌ها

وضعیت امنیتی وب‌سایت و گواهی‌های SSL/TLS را در این بخش می‌توانید بررسی کنید.

DevTools > Security

Lighthouse

Lighthouse یک ابزار خودکار برای بررسی کیفیت وب‌سایت‌ها و اپلیکیشن‌های وب است. این ابزار به شما کمک می‌کند تا عملکرد، دسترس‌پذیری، SEO و ویژگی‌های PWA اپلیکیشن خود را ارزیابی کنید.

ویژگی‌های کلیدی Lighthouse برای PWA – آموزش PWA

عملکرد اپلیکیشن را از جنبه‌های مختلف مانند زمان بارگذاری، سرعت تعامل و زمان نمایش صفحه بررسی می‌کند.

DevTools > Lighthouse

عوامل ارزیابی عملکرد

Time to Interactive (زمان تا تعامل)

First Contentful Paint (اولین نقاشی محتوا)

Largest Contentful Paint (بزرگترین نقاشی محتوا)

بررسی قابلیت‌های PWA

Lighthouse قابلیت‌های PWA مانند افزودن به صفحه اصلی، قابلیت‌های آفلاین و استفاده از HTTPS را ارزیابی می‌کند.

عوامل ارزیابی قابلیت‌های PWA

Service Worker Registered

Web App Manifest

Offline Availability

دسترس‌پذیری و SEO

روش‌های تست عملکرد و قابلیت‌ها PWA – آموزش ساخت وب اپلیکیشن با PWA

عملکرد اپلیکیشن وب پیشرفته شامل سرعت بارگذاری، زمان تعامل و پاسخ‌دهی به درخواست‌ها است. برای تست این ویژگی‌ها می‌توانید از ابزارهای زیر استفاده کنید:

استفاده از Chrome DevTools Performance

ضبط یک بازدید از اپلیکیشن و تحلیل زمان‌های بارگذاری و عملکردها.

DevTools > Performance > Record

استفاده از Lighthouse برای تحلیل عملکرد

انجام تست‌های جامع از اپلیکیشن برای دریافت نمرات عملکرد و گزارش‌های بهبود.

DevTools > Lighthouse > Generate Report

تست قابلیت‌های PWA

قابلیت‌های PWA شامل ویژگی‌هایی مانند نصب اپلیکیشن، استفاده آفلاین و پشتیبانی از ویژگی‌های پیشرفته است.

تست افزودن به صفحه اصلی

بررسی این که آیا اپلیکیشن به درستی به صفحه اصلی دستگاه اضافه می‌شود.

window.addEventListener('appinstalled', () => { console.log('PWA was installed'); });

تست قابلیت‌های آفلاین

قطع اتصال اینترنت و بررسی عملکرد اپلیکیشن برای اطمینان از قابلیت استفاده آفلاین.

// بررسی وضعیت آفلاین
if (!navigator.onLine) {
  console.log('App is offline');

تست ویژگی‌های Service Worker

بررسی کش‌ها، مدیریت درخواست‌ها و بررسی وضعیت Service Worker.

// بررسی وضعیت Service Worker navigator.serviceWorker.ready.then(registration => { console.log('Service Worker is ready:', registration); });

تست امنیت PWA – آموزش PWA

امنیت PWA شامل بررسی استفاده از HTTPS، محافظت از داده‌ها و بررسی آسیب‌پذیری‌های امنیتی است.

تست HTTPS و گواهی‌ها

بررسی وضعیت HTTPS و گواهی‌های SSL/TLS در Chrome DevTools Security.

DevTools > Security

تست آسیب‌پذیری‌های CSRF و XSS

بررسی صحت توکن‌های CSRF و تست ورودی‌های کاربر برای آسیب‌پذیری‌های XSS.

// بررسی توکن‌های CSRF app.use(csrf({ cookie: true })); // تصفیه ورودی‌های کاربر const cleanHTML = DOMPurify.sanitize(dirtyHTML);

تست و دیباگ PWAها شامل استفاده از ابزارهای قدرتمند مانند Chrome DevTools و Lighthouse و همچنین اجرای روش‌های تست مختلف برای ارزیابی عملکرد، قابلیت‌ها و امنیت اپلیکیشن است. با استفاده از این ابزارها و روش‌ها می‌توانید مطمئن شوید که اپلیکیشن وب پیشرفته شما به درستی عمل می‌کند و به نیازهای کاربران پاسخ می‌دهد.

اگر قصد یادگیری طراحی سایت وردپرسی با کدنویسی را دارید می توانید از آموزش های وایت وال نظیر “آموزش پروژه محور طراحی سایت با وردپرس” ، “آموزش پروژه محور سایت فروشگاهی با وردپرس” ، “آموزش رایگان طراحی سایت با وردپرس” استفاده کنید.

4.6/5 - (11 امتیاز)

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

دیدگاهها

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

  1. ناشناس

    این دوره چند قسمت هست؟

    • وایت وال

      فعلا مشخص نیست. تا زمانی که همه مباحث پوشش داده بشه آموزش ادامه داره

  2. Hadis

    سلام برای این دوره نیاز به یادگرفتن کاتلین هست؟

    • وایت وال

      خیر