Введение в Progressive Web Apps (PWA): как и зачем их использовать

Введение в Progressive Web Apps (PWA): как и зачем их использовать

Привет, коллеги! Сегодня я хочу поговорить с вами о Progressive Web Apps (PWA) – технологии, которая в последнее время набирает всё большую популярность. Разработчики по всему миру находят в PWA много преимуществ, и если вы ещё не использовали их в своих проектах, самое время начать. В этом гайде мы разберёмся, что такое PWA, как их создать и почему они могут быть полезны для вашего следующего проекта.

Что такое Progressive Web Apps (PWA)?

Проще говоря, PWA – это веб-приложения, которые выглядят и функционируют как нативные мобильные приложения. Они работают в браузере, но благодаря ряду технологий могут быть установлены на устройство пользователя, работая оффлайн и обеспечивая высокую производительность.

Основные преимущества PWA:

  • Оффлайн-режим: PWA могут работать без подключения к интернету благодаря технологии Service Workers.
  • Установка на домашний экран: Пользователи могут добавить PWA на главный экран своих устройств без необходимости заходить в App Store или Google Play.
  • Быстрота и производительность: PWA быстро загружаются и обеспечивают плавный пользовательский опыт.
  • Обновления в реальном времени: Автоматические обновления без необходимости вмешательства пользователя.

Как создать PWA?

1. Создание базовой структуры

Для начала вам понадобится базовая структура HTML, CSS и JavaScript. Важно, чтобы ваше приложение было адаптивным и работало на всех устройствах.

html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My PWA</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>Welcome to My Progressive Web App!</h1> <script src="app.js"></script> </body> </html>

2. Добавление манифеста

Файл манифеста (manifest.json) содержит метаданные о вашем приложении. Он определяет, как ваше приложение будет отображаться и функционировать после установки на устройство пользователя.

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

Не забудьте подключить манифест в вашем HTML-файле:

<link rel="manifest" href="/manifest.json">

3. Настройка Service Worker

Service Worker – это скрипт, который браузер запускает в фоновом режиме, отдельно от веб-страницы. Он позволяет вашему приложению работать оффлайн, кэшировать ресурсы и выполнять фоновые задачи.

Создайте файл service-worker.js и добавьте следующий код для кэширования ресурсов:

self.addEventListener('install', event => { event.waitUntil( caches.open('v1').then(cache => { return cache.addAll([ '/', '/styles.css', '/app.js', '/icon-192x192.png', '/icon-512x512.png' ]); }) ); }); self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(response => { return response || fetch(event.request); }) ); });

Зарегистрируйте Service Worker в вашем app.js:

if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/service-worker.js') .then(registration => { console.log('ServiceWorker registration successful with scope: ', registration.scope); }, error => { console.log('ServiceWorker registration failed: ', error); }); }); }

4. Тестирование PWA

Для тестирования PWA вы можете использовать DevTools в браузере Google Chrome. Откройте DevTools, перейдите на вкладку "Application" и проверьте наличие манифеста и Service Worker.

5. Публикация и поддержка

После того, как ваше PWA готово, его можно размещать как обычный веб-сайт. Пользователи смогут добавлять ваше приложение на главный экран и пользоваться им, как нативным приложением.

Введение в Progressive Web Apps (PWA): как и зачем их использовать

Почему стоит использовать PWA?

  • Улучшенный пользовательский опыт: PWA обеспечивают быстрый и плавный опыт работы, что приводит к увеличению вовлеченности и удовлетворенности пользователей.
  • Снижение затрат: Разработка и поддержка одного PWA обходится дешевле, чем разработка и поддержка нескольких нативных приложений для разных платформ.
  • Увеличение охвата: PWA работают на всех устройствах и платформах, что помогает привлечь более широкую аудиторию.
  • SEO: PWA индексируются поисковыми системами так же, как обычные веб-сайты, что способствует улучшению видимости в поисковой выдаче.

Надеюсь, этот гайд поможет вам начать работу с Progressive Web Apps. Удачи в разработке и пусть ваши PWA приносят максимальную пользу вашим пользователям!

3
Начать дискуссию
\n\n","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"2. Добавление манифеста"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Файл манифеста (manifest.json) содержит метаданные о вашем приложении. Он определяет, как ваше приложение будет отображаться и функционировать после установки на устройство пользователя.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"{\n \"name\": \"My PWA\",\n \"short_name\": \"PWA\",\n \"start_url\": \"/\",\n \"display\": \"standalone\",\n \"background_color\": \"#ffffff\",\n \"theme_color\": \"#000000\",\n \"icons\": [\n {\n \"src\": \"icon-192x192.png\",\n \"sizes\": \"192x192\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"icon-512x512.png\",\n \"sizes\": \"512x512\",\n \"type\": \"image/png\"\n }\n ]\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Не забудьте подключить манифест в вашем HTML-файле:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"3. Настройка Service Worker"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Service Worker – это скрипт, который браузер запускает в фоновом режиме, отдельно от веб-страницы. Он позволяет вашему приложению работать оффлайн, кэшировать ресурсы и выполнять фоновые задачи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Создайте файл service-worker.js и добавьте следующий код для кэширования ресурсов:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"self.addEventListener('install', event => {\n event.waitUntil(\n caches.open('v1').then(cache => {\n return cache.addAll([\n '/',\n '/styles.css',\n '/app.js',\n '/icon-192x192.png',\n '/icon-512x512.png'\n ]);\n })\n );\n});\n\nself.addEventListener('fetch', event => {\n event.respondWith(\n caches.match(event.request).then(response => {\n return response || fetch(event.request);\n })\n );\n});","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зарегистрируйте Service Worker в вашем app.js:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"if ('serviceWorker' in navigator) {\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('/service-worker.js')\n .then(registration => {\n console.log('ServiceWorker registration successful with scope: ', registration.scope);\n }, error => {\n console.log('ServiceWorker registration failed: ', error);\n });\n });\n}","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"4. Тестирование PWA"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для тестирования PWA вы можете использовать DevTools в браузере Google Chrome. Откройте DevTools, перейдите на вкладку \"Application\" и проверьте наличие манифеста и Service Worker.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"5. Публикация и поддержка"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

После того, как ваше PWA готово, его можно размещать как обычный веб-сайт. Пользователи смогут добавлять ваше приложение на главный экран и пользоваться им, как нативным приложением.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"12e28d5d-538b-5ce5-a327-cf747218fcb6","width":1640,"height":1024,"size":849370,"type":"jpg","color":"d1b893","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACQcI/8QAHxAAAgMAAgIDAAAAAAAAAAAAAQIDBAUGBwgRAAkS/8QAFgEBAQEAAAAAAAAAAAAAAAAABgUH/8QAKBEAAgEDAgUDBQAAAAAAAAAAAQIDBAURBiEAEhMiUTFBYRQyQlKR/9oADAMBAAIRAxEAPwA2vr67V6L4D4f9j9V8jxKjcb4p3RzDsGLb1sPkeXyLI5HocL63y68GZHLx7Jw7mRLaxK8NupPpi0s88NoUtWpbSKPMNYU9/lvlC1reRIUp4txIEiaQ1D9VXAbJxEAcMhByGB7SpdaXNkSgrGufLJJJIydHkV2EKw8yspKsVZpCAGX8VZSULKwtz+Y/g5O7T2Njs2nYmZpZ6mXw3Pt5lWaQl5a+daOYxs0YHLRVLBYmauschJ/Xv5Ak07fY5HSGqvUsSOyRSG9SqZI1JCOQ9VzguoDEP3AnDb54XQ6hs7xRPNQaSSVo0aVGsrZWRlBdT0qbp5ViQen2ZHZ244Hz6tNTTk6e7uz5NG9JQbs7pyVqL27DU2lNjdnMjVmkMJkM+dnzFyhYy0KUhP7qwGNZrTattbDZvp7huNjskYG/rsGYD4J8ngTpbeCvB3AaDAPoMlif6QM+cDwONytrasbFE09BEQlERLtlURFPpVVRKAqqAAqgAAAAD18mxgGNCQM8i+3wOKEir1H2H3t7D9jx/9k="}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Почему стоит использовать PWA?"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Улучшенный пользовательский опыт: PWA обеспечивают быстрый и плавный опыт работы, что приводит к увеличению вовлеченности и удовлетворенности пользователей.","Снижение затрат: Разработка и поддержка одного PWA обходится дешевле, чем разработка и поддержка нескольких нативных приложений для разных платформ.","Увеличение охвата: PWA работают на всех устройствах и платформах, что помогает привлечь более широкую аудиторию.","SEO: PWA индексируются поисковыми системами так же, как обычные веб-сайты, что способствует улучшению видимости в поисковой выдаче."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Надеюсь, этот гайд поможет вам начать работу с Progressive Web Apps. Удачи в разработке и пусть ваши PWA приносят максимальную пользу вашим пользователям!

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":31,"hits":193,"reads":null,"online":0},"dateFavorite":0,"hitsCount":193,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1228154-vvedenie-v-progressive-web-apps-pwa-kak-i-zachem-ih-ispolzovat","author":{"id":3263274,"name":"Fox Design","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"d72654f5-e963-5cd8-be65-81a2cccdd806","width":200,"height":200,"size":25170,"type":"png","color":"333c42","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgcJ/8QAIhAAAgICAAYDAAAAAAAAAAAAAQIDBQQRAAYHEiFBEzJh/8QAFgEBAQEAAAAAAAAAAAAAAAAABQQC/8QAIhEAAQQABgMBAAAAAAAAAAAAAQACAwQREkFRcfATITFD/9oADAMBAAIRAxEAPwANyRZclW1zUzX8VJcUd7AYbfEsgC8eMZXT5ogEDxyJ9hIrjYAHnzqeZ9qOd2Hpg+c90W4Yqj6rR+mu2HdVIbDolTRZ+TFiW+C0CTOsRaUAlAx1vf5wo2y0gEox0LwSAEn6HYeJN1M5HWbFhkAwa9wGQEd3cp359798H3SfE/lJVQM7eFodY0VJLYZMstNgu7zOzM2OhJJY7JOuAsx3V4AX/9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"872eec1e-c06d-5d43-9539-b5e5121280b1","width":1920,"height":560,"size":819661,"type":"jpg","color":"06141b","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUHCv/EACYQAAECAgkFAAAAAAAAAAAAAAECEQAEAxIUISIxQUJhBQYTMtH/xAAYAQACAwAAAAAAAAAAAAAAAAAABgEDB//EACoRAAEBAwoHAQAAAAAAAAAAAAERAAIhAxIxQVFSkZLR8AQTIiNhcYGh/9oADAMBAAIRAxEAPwDEXKdapZMFNFMoCWYGsKyQ4UaijekkpDHhgzkw3kKirAqEKRRN+g2Z8mUj23qqXftdR3BVcjvOcAAt80GDNahc2nrpAnk/mjQeHeJJMjEkr0CnBot5KRjjXmNyueYpU2nEs5zHLruUaMULWwxqyG4/YFNpxLExy67lGjf/2Q=="}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":2215207,"userId":3263274,"count":0,"shareImage":"https://api.vc.ru/achievements/share/2215207"}],"lastModificationDate":1764939330,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":3}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":{"type":"image","data":{"uuid":"19b17b59-b527-5b9b-891a-9566fdb0e71e","width":1640,"height":1024,"size":218367,"type":"jpg","color":"dac9ad","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAKAAoDASEAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwMI/8QAIxAAAQMEAgEFAAAAAAAAAAAAAQIDEQAEBQYHElEhQWFxsf/EABYBAQEBAAAAAAAAAAAAAAAAAAIDBP/EABoRAAIDAQEAAAAAAAAAAAAAAAABBBEyAyH/2gAMAwEAAhEDEQA/AIbXyJhcnoN/q+MY72aca4l1LluewWmZWlXgqiZ9ifFAxweCJJNk1PwfT9rNG8TVl+6ad0Lm3ssscZ37rDTbThsXwVISEkggyJH2aytRiZYpOj//2Q=="}},"customCover":null,"robotsTag":"noindex","categories":[10],"isAnonymized":true}};