концепция
Progressive Web Apps— это прогрессивное веб-приложение, которое работает в современных браузерах и обладает сверхспособностями. Он поддерживает возможности, специфичные для приложения, такие как обнаружение, установка, автономная работа и отправка сообщений.Этот проект инкапсулирует вышеуказанные функции самым простым способом.
SIMPLE-PWA
SIMPLE-PWAЭто пример проекта pwa, смонтированного на vue. pwa — это концепция прогрессивного веб-приложения, которое не зависит ни от какого фреймворка, vue — просто носитель реализации.
ПроверитьРеализация сервера push-сообщений PWA
demo
Пожалуйста, используйте последнюю версию браузера Chrome с более высокой версией Android (> 5.0) для доступа.
содержание
- список заданий,Посмотреть все настраиваемые элементы
- Просмотр в автономном режиме
- Отправить уведомление
- инструмент:Инструменты повышения производительности LightHouse,библиотека инструментов sw sw-toolbox
рабочий процесс
Работа pwa зависит от Service Worker (сокращенно sw).
Список задач -> регистрация ПО -> мониторинг ПО/прокси
- Во-первых, добавьте manifest.json и register.js для регистрации sw в index.html;
- Затем register.js обнаружит navigator.serviceWorker и зарегистрирует sw.js;
- Наконец, sw.js постоянно прослушивает и делегирует события sw.
Примечание. Этот проект использует copy-webpack-plugin и sw-precache-webpack-plugin для компиляции и создания файлов из каталога /src/sw в корневой каталог проекта, поэтому используйте переменную <% htmlwebpackplugin.files.publicpath %> для получать%>
index.html:
<!DOCTYPE html>
<html>
<head>
...
<!-- Manifest -->
<link rel="manifest" href="<%= htmlWebpackPlugin.files.publicPath %>manifest.json">
</head>
<body>
...
<!-- Service Worker register -->
<!-- without webpush -->
<script src="<%= htmlWebpackPlugin.files.publicPath %>register.simple.js"></script>
<!-- with webpush -->
<!-- <script src="<%= htmlWebpackPlugin.files.publicPath %>register.js"></script> -->
</body>
</html>
register.js:
if (navigator.serviceWorker) {
navigator.serviceWorker.register('/sw.js')
.then(function (registration) {
console.log('Registered events at scope: ', registration)
})
.catch(function (err) {
console.log('ServiceWorker registration failed: ', err)
})
}
sw.js:
self.addEventListener('some event', e => {
// do something
})
правила работы
добавить на домашний экран
Дополнение на главный экран можно установить, при этом должны быть соблюдены следующие условия:
- Требуется файл manifest.json.
- Файлу манифеста требуется начальный URL-адрес (start_url).
- Для файла манифеста требуется значок PNG размером не менее 144x144 пикселей.
- Веб-сайт использует Service Worker, работающий через HTTPS (или локальный хост), т.е. sw активирован
- Пользователям необходимо просмотреть веб-сайт не менее двух раз, а интервал между двумя посещениями должен составлять более пяти минут.
{
"name": "PWA Lite",
"short_name": "PWA",
"display": "standalone",
"start_url": "/",
"theme_color": "#ffffff",
"background_color": "#ffffff",
"icons": [
{
"src": "./static/appicon_144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "./static/appicon_96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "./static/appicon_48.png",
"sizes": "48x48",
"type": "image/png"
}
]
}
В инструментах разработчика Chrome:
- Проверка приложения/манифеста на достоверность manifest.json
- Application/Service Workers Просмотр текущего статуса ПО
- Вы можете проверить «Обновление при перезагрузке» при отладке рабочих приложений/служб.
Добавление на главный экран появится только один раз, что очень неудобно при отладке. Однако, если вы используете хром для отладки, вы можете получить доступchrome://flags/#bypass-app-banner-engagement-checksУстановите флажок «Игнорировать», чтобы он отображался при каждом посещении.
Просмотр в автономном режиме
SW предлагает многорежим кэширования.
Когда sw находится в активированном состоянии, вы можете прослушивать событие fetch в sw.js и перехватывать и обрабатывать любой запрос:
// 请求命中缓存时直接返回缓存结果,否则发起请求
self.addEventListener('fetch', e => {
e.respondWith(
caches.match(e.request).then(response => {
if (response != null) {
return response
}
return fetch(e.request.url)
})
)
})
В инструментах разработчика Chrome:
- Application/Cache/Cache Storage Просмотр списка кешей
- Если перехват sw прошел успешно, слово (от ServiceWorker) можно увидеть в колонке размера Network
- Проверьте офлайн в сети, а затем обновите страницу, вы увидите, что страницы, которые вы посетили, по-прежнему доступны, и не будет «не подключен к Интернету», в этом сила автономного просмотра.
О режиме кеша браузера
- from memory cacheПамять существует только во время работы браузера, например данные изображения base64 и статические ресурсы, неконтролируемые
- from disk cacheЖесткий диск, долгосрочный кеш на жестком диске, например статические ресурсы, неуправляемый
- from ServiceWorkerSW прокси, полностью управляемый
сообщение push.
Push-сообщение должно соответствовать следующим условиям:
- sw находится в активированном состоянии
- Пользователь разрешает уведомления
- Диалоговое окно, спрашивающее пользователя, разрешить ли это, будет отображаться только один раз.Вы можете щелкнуть значок i в адресной строке Chrome и изменить элемент «Уведомление» на «Использовать глобальные настройки по умолчанию (спросить)», чтобы инициировать диалоговое окно запроса. .
- После того, как пользователь разрешит, будет получен объект подписки, в котором конечная точка указывает на push-сервер Google, поэтому его нужно глобально отменять при получении
// 服务器推送事件
self.addEventListener('push', e => {
// do something
}
// 推送消息对话框点击事件
self.addEventListener('notificationclick', e => {
// do something
}
Начинать
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build