В современном мире, мобильные устройства занимают все более важное место в жизни людей. С ростом популярности этих устройств, пользователи все более часто сталкиваются с проблемой ограниченности мощности своего устройства и необходимостью загрузки множества приложений на свое устройство. В статье рассматривается разработка PWA-приложения, как способ решения этих проблем.
Ключевые слова: PWA-приложение, разработка, веб.
Прогрессивные веб-приложения (Progressive Web Applications, PWA) — это современная технология разработки приложений, которая комбинирует преимущества веб-сайтов и мобильных приложений. Они обладают набором функций, позволяющих создать полноценное приложение, которое работает в браузере пользователя и может быть установлено на устройство [1].
Чтобы понять, что такое Progressive Web Apps (PWA), достаточно представить, что некий сайт взаимодействует с пользователем как приложение. То есть у пользователя есть возможность установить его на любой гаджет, получать уведомления и работать с ним. Причем работа может продолжаться даже без интернет-соединения.
Понятие PWA было использовано представителями компании Google на конференции в 2015 году, а реализовано почти два года спустя. Сегодня PWA активно используют такие компании, как Twitter, Tinder, Uber, Telegram, Starbucks, Forbes, AliExpress, Aviasales.
Основное предназначение PWA — это увеличить конверсию, количество пользователей и удобство использования веб-приложений на мобильных устройствах.
Преобразование стандартного веб-сайта в PWA-приложение выполняется в три этапа [3]:
- добавление манифеста PWA-приложения;
- разработка скрипта Service Worker;
- обеспечение доступа к сайту по протоколу HTTPS.
Манифест является ключевым элементом технологии PWA и представляет собой текстовый файл, содержащий информацию о приложении в формате JSON. Ссылка на файл манифеста должна быть размещена в HTML-разметке веб-страницы.
Service Worker фактически представляет собой прокси-сервер между веб-приложением и сетью, реализованный в виде файла на языке JavaScript. Первым шагом к использованию Service Worker является его регистрация в браузере, при которой происходит привязка скрипта к заданному URL. После регистрации Service Worker получает возможность контролировать запросы браузера к PWA-приложению. Например, для обеспечения автономной работы приложения запросы браузера перехватываются, проверяется доступность сети, и, в случае отсутствия интернет-подключения, запрашиваемый ресурс возвращается из локального хранилища. При этом для браузера результат выглядит как полноценный ответ от сервера [4].
Все остальные функции PWA-приложения также реализовываются в скрипте Service Worker — фоновая синхронизация данных, отправка всплывающих уведомлений, предварительная загрузка ресурсов и др. Service Worker разрабатывается на чистом JavaScript и не требует подключения дополнительных фреймворков или библиотек.
Особенности PWA-приложений
PWA-приложения имеют ряд особенностей, которые отличают их от традиционных веб-сайтов и мобильных приложений. Одной из ключевых особенностей является возможность работы в автономном режиме. Это достигается благодаря кэшированию контента, что позволяет пользователям запускать приложение даже при отсутствии интернет-соединения.
Основные особенности и требования для PWA:
- Отзывчивый дизайн: PWA должно быть отзывчивым и корректно отображаться на различных устройствах, включая мобильные телефоны, планшеты и настольные компьютеры;
- Offline режим: PWA должно обеспечивать возможность работать в оффлайн-режиме. Для этого используется кэширование ресурсов, например, с помощью Service Worker, чтобы приложение сохраняло данные и продолжало функционировать даже при отсутствии интернета [2];
- Быстрая загрузка: PWA должно обеспечивать быструю инициализацию и загрузку, чтобы предоставить пользователям плавный опыт. Использование кэширования, уменьшение размера изображений и минимизация запросов к серверу способствуют ускорению загрузки;
- Манифест приложения: PWA должно содержать манифест, который описывает приложение, предоставляя информацию о его имени, иконках, цвете темы и других параметрах. Это помогает добавить PWA на главный экран мобильного устройства и создает впечатление нативного приложения;
- Service Worker: Использование службы Service Worker обеспечивает возможность фоновой синхронизации, уведомлений и кэширования ресурсов для работы в оффлайн-режиме;
- Безопасность: PWA должно быть развернуто на сервере с использованием протокола HTTPS для обеспечения безопасности передачи данных между клиентом и сервером;
- Навигация без перезагрузки: PWA предоставляет плавную навигацию без необходимости перезагрузки страницы. Это создает впечатление отзывчивости, аналогичное нативным приложениям;
- Работающее в различных браузерах: PWA должно быть совместимо с различными браузерами, чтобы обеспечивать одинаковый опыт пользователя независимо от выбранного им браузера;
- Обновления без переустановки: PWA может автоматически обновляться без необходимости переустановки. Это позволяет пользователям всегда использовать последнюю версию приложения.
Преимущества PWA-приложений
PWA-приложения предлагают ряд преимуществ, которые делают их привлекательными для разработчиков и пользователей. Одним из главных преимуществ является универсальность — одно приложение может работать на различных платформах и устройствах. Это упрощает разработку и поддержку приложений.
Можно выделить следующие преимущества технологии PWA:
- Прогрессивное веб-приложение обладает свойствами нативного приложения и, в то же время, позволяет использовать функционал браузера, что обеспечивает ему дополнительные возможности;
- Одним из преимуществ технологии PWA является автономность ее приложений. Приложение кэшируется в памяти браузера и таким образом сохраняет работоспособность в автономном режиме;
- PWA-технология обладает кроссплатформенностью. Разработанные с применением этой технологии приложения можно устанавливать на любые устройства независимо от платформы и операционной системы. Это является большим преимуществом по сравнению с д нативными приложениями;
- Клиентская часть разработки отделена от серверной части. Благодаря этому тратится меньше ресурсов и времени на разработку и доработку дизайна;
- Главным преимуществом прогрессивного веб-приложения по сравнению с традиционным является объем, занимаемый им в памяти устройства.
Недостатки PWA-приложений
Не смотря на все преимущества, PWA-приложения имеют и некоторые недостатки. Одним из них является ограниченный доступ к некоторым функциям устройства, таким как контакты, календарь и уведомления. Также производительность PWA-приложений может быть ниже, чем у нативных приложений.
Технология PWA, как и любая технология, не универсальна и имеет ряд недостатков:
- Невозможно наладить использование технологии в старых операционных системах. Технологии PWA не так много лет, поэтому неудивительно, что на устаревших устройствах она не может полноценно поддерживаться. Несмотря на то, что проблема несомненно решится в будущем, на данный момент это может стать причиной жалоб клиентов.
- По сравнению с нативными приложениями, прогрессивные веб-приложения не могут делать все, что могут обычные приложения. Сегодня по-прежнему отсутствует доступ к таким важным функциям устройства, как беспроводная технология Bluetooth, внешнее освещение, датчики приближения, возможность управления расширенными элементами камеры и другие. Так как технология PWA написана на языке программирования JavaScript, расход заряда батареи увеличивается в отличии от приложений, написанных на тех языках программирования, на которых написаны ОС.
- Работа офлайн так же ограничена, потому что любое прогрессивное веб-приложении в первую очередь ориентирована на работу с доступом к интернету. Но этот недостаток не является серьезным, так как на сегодняшний день большинство устройств имеют постоянное подключение к сети интернет.
Безопасность PWA-приложений
Как и любая другая технология, PWA подвергаются ряду угроз безопасности, которые разработчики должны учитывать, чтобы обеспечить защиту данных и пользовательского опыта. Рассмотрим ключевые аспекты безопасности PWA и рекомендации по их обеспечению.
Одним из основных принципов безопасности PWA является защита передачи данных между клиентом и сервером. Использование протокола HTTPS обеспечивает шифрование данных и защиту от атак типа Man-in-the-Middle. Рекомендуется приобрести SSL-сертификат для домена и настроить сервер для обязательного использования HTTPS [5].
Контроль доступа и аутентификация играют ключевую роль в обеспечении безопасности PWA. Использование надежных методов аутентификации, таких как JSON Web Tokens (JWT) или OAuth, гарантирует, что только авторизованные пользователи имеют доступ к конфиденциальным данным.
Эффективная обработка ошибок и систематическое логирование являются важными элементами безопасности PWA. Ошибки на клиенте не должны раскрывать чувствительную информацию, а логирование должно быть настроено так, чтобы обнаруживать подозрительную активность.
Меры предосторожности против атак типа Cross-Site Request Forgery (CSRF) и Cross-Site Scripting (XSS) также необходимы. Использование токенов CSRF предотвращает несанкционированные запросы. Также необходимо и фильтровать ввод пользователя, чтобы предотвратить вставку вредоносного кода.
Постоянное обновление PWA до последних версий и поддержка устаревших версий помогают в предотвращении уязвимостей, связанных с устаревшими библиотеками и зависимостями. Использование средства автоматического обновления сервис-воркера для мгновенного развертывания изменений помогает решить эту проблему.
Литература:
- Progressive web apps // MDN Web Docs URL: https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
- Что делает прогрессивное веб-приложение хорошим? // Web.dev URL: https://web.dev/articles/pwa-checklist?hl=ru
- Get started with Progressive Web Apps // Microsoft Learn URL: https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/how-to/
- John M. Wargo. Learning Progressive Web Apps: Building Modern Web Apps Using Service Workers — М.: O’Reilly, 2020
- How to Protect Your PWA — Web App Security Best Practices // FreeCodeCamp URL: https://www.freecodecamp.org/news/how-to-protect-your-pwa/