Статьи

CSS и PWA: несколько советов по созданию прогрессивных веб-приложений

В последние годы мы наблюдали ряд серьезных изменений в онлайн-опыте, в основном из-за распространения мобильных устройств. Эволюция Интернета привела нас от единых версий веб-сайтов к настольным и мобильным версиям, к адаптивным сайтам, которые адаптируются в соответствии с размером экрана, а затем к собственным мобильным приложениям, которые либо воссоздают рабочий стол в качестве нативного приложения, либо действуют в качестве шлюза для адаптивной версии.

Последней итерацией всего этого является прогрессивное веб-приложение (PWA). PWA — это программная платформа, цель которой — объединить лучшее из Интернета и нативного опыта для пользователей веб-сайтов / приложений.

В этой статье о CSS и PWA мы собираемся обсудить ряд методов, которые можно использовать при создании CSS, необходимого для разработки PWA.

Что такое PWA?

Есть три основных особенности PWA. Как вы увидите, прогрессивное веб-приложение — это «устранение» проблем, обычно связанных с веб-приложениями, путем принятия некоторых методов, используемых нативными приложениями для решения этих проблем.

  1. Надежный PWA должен надежно загружаться как собственное приложение (независимо от состояния сети). Это противоречит веб-странице, которая обычно не загружается, если устройство отключено от сети.

  2. Быстро Производительность PWA не должна зависеть от таких факторов, как география, скорость сети, нагрузка или другие факторы, которые не зависят от конечного пользователя.

  3. Заниматься PWA должны имитировать полноэкранное взаимодействие с собственным приложением, не требуя магазина приложений, даже поддерживая такие функции, как push-уведомления.

Добавление PWA на домашний экран

Существуют и другие функции PWA, но сейчас мы остановимся на наиболее важных, описанных выше.

Google был на переднем крае продвижения этих видов приложений, но принятие PWA было связано с поставщиками и множеством других компаний в Интернете, помогая принятию и принятию концепции PWA.

Ниже приводятся комментарии Итая Садана, генерального директора Duda , который присутствовал на Cloudfest 2018:

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

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

Что требуется для разработки PWA?

Разработка PWA ничем не отличается от разработки стандартного веб-приложения, и может быть возможно обновить существующую кодовую базу. Обратите внимание, что для развертывания требуется HTTPS, хотя вы можете проводить тестирование на локальном хосте. Требования к приложению, чтобы стать PWA, обсуждаются ниже.

1. Создайте файл манифеста

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

Для этого приложению необходимо предоставить файл manifest.jsonфайл JSON, который позволяет разработчику контролировать внешний вид PWA, то, что необходимо запустить, и другие параметры.

Типичный файл манифеста показан ниже. Как мы видим, свойства задают ряд настроек внешнего вида, которые будут использоваться на домашнем экране устройства, на котором будет установлено приложение.

Пример файла манифеста

Стилизация PWA начинается с файла манифеста, но в этой части нет реального CSS. Это просто прямые свойства , которые определяют имя приложения, значки, основные цвета и т. Д.

2. Использование сервисного работника

Сервисный работник — это, по сути, особый тип веб-работника, реализованный в виде файла JavaScript, который работает независимо от браузера — так что он может перехватывать сетевые запросы, кэшировать или извлекать ресурсы из кэша, а также доставлять push-сообщения по мере необходимости.

Сервисный работник — это то, что делает PWA действительно способным работать в автономном режиме

3. Установите Активы Сайта, включая CSS

При первой регистрации работника службы запускается событие установки. Здесь устанавливаются все ресурсы сайта, включая любые CSS, JS и другие файлы мультимедиа и ресурсов, необходимые для приложения:

self.addEventListener('install', function(e) {
e.waitUntil(
  caches.open('airhorner').then(function(cache)
  {
    return cache.addAll([
    '/',
    '/index.html',
    '/index.html?homescreen=1',
    '/?homescreen=1',
    '/styles/main.css',
    '/scripts/main.min.js',
    '/sounds/airhorn.mp3'
    ]);
  })
);
});

Разработка PWA не сильно отличается от разработки веб-приложений при условии соблюдения основных требований.

Это где CSS начинает вмешиваться, с определенными файлами, которые будут использоваться для стилизации прогрессивного веб-приложения.

CSS и PWA: некоторые соображения

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

Должно ли приложение следовать платформо-зависимым интерфейсам?

Если мы выбираем одну платформу в пользу другой (скажем, Android в пользу iOS), мы рискуем оттолкнуть или поставить в невыгодное положение ту часть аудитории, которую мы не рассматривали.

Мы также связываем наши состояния с этой платформой — будь то хорошие или плохие. Также весьма вероятно, что конструкции платформ меняются по мере развития между разными версиями.

Мое мнение заключается в том, что следует максимально избегать привязки к поставщикам.

Платформно-независимый дизайн

Исходя из нашего предыдущего рассмотрения, идеальный вариант — выбрать в основном нейтральный к платформе дизайн.

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

Нужно использовать стандартное поведение и проводить всестороннее пользовательское тестирование, чтобы убедиться, что на определенных платформах не было проблем UX. В качестве примера, настоятельно рекомендуется избегать написания пользовательских компонентов и выбирать стандартные элементы управления HTML5, которые браузер может оптимизировать для пользовательского интерфейса и лучшего опыта.

Возможности устройства

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

Ваши соображения CSS и стиля должны учитывать все это и разрабатывать это с самого начала.

Однако прелесть работы с PWA заключается в том, что вы можете использовать комбинацию CSS и реализацию Service Worker для расширения или ограничения функциональности в зависимости от доступных ресурсов.

Изящная деградация и прогрессивное улучшение

CSS в целом может изящно отступить; любые неподдерживаемые свойства просто игнорируются.

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

Альтернативный подход к постепенному ухудшению — прогрессивное улучшение. Это концепция, которую мы всегда должны учитывать при работе с нашим PWA. Например, мы должны сначала проверить поддержку API Service Worker, прежде чем пытаться использовать его, используя код, подобный следующему:

 if (!('serviceWorker' in navigator)) {  
  console.log('Service Worker not supported');
  return;
}

Вариации этой логики могут использоваться для обработки различных вариантов использования, таких как стилизация для конкретных платформ и другие, которые мы упомянем позже.

Общие предложения

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

Выступая в качестве разработчика / менеджера по продукту, который понимает тонкий баланс между потребностями пользователей и ограниченной доступностью ресурсов для разработки, я всегда рекомендовал бы найти промежуточную позицию, которая охватывает как можно больше вариантов использования, без чрезмерных накладных расходов на разработку и разработку. команды тестирования.

Появление стандартов дизайна, таких как Material Design, и таких фреймворков, как Bootstrap, помогает создавать независимые от платформы проекты.

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

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

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

Например, метод navigator.platform возвращает платформу, на которой запущено приложение, в то время как navigator.userAgent возвращает используемый браузер.

Агент браузера ненадежен, когда дело доходит до обнаружения браузера, поэтому приведенный ниже код является скорее демонстрацией концепции, чем кода, который следует использовать в реальной среде.

Платформа navigator.platform является более надежным методом, но огромное количество доступных платформ делает его использование в нашем примере громоздким.

 /**
* Determine the mobile operating system.
* This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'.
*
* @returns {String}
*/

function getMobileOperatingSystem()
{
  var userAgent = navigator.userAgent || navigator.vendor || window.opera;
  // Windows Phone must come first because its UA also contains "Android"
  if (/windows phone/i.test(userAgent))
  {
    return  "Windows Phone";
  }

  if (/android/i.test(userAgent))
  {
    return  "Android";
  }

  if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream)
  {
    return  "iOS";
  }

  return  "unknown";
  // return “Android” - one should either handle the unknown or fallback to a specific platform, let’s say Android
}

Используя возвращаемое значение getMobileOperatingSystem()

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

Другой вариант — использовать более простую цветовую схему, только CSS, примененный к основным стилям, которые соответствуют базовой ОС, хотя это все еще может «сломаться» в случае, когда пользователи сделали скин для своего устройства.

PWA Frameworks

Изучая, как разрабатывать PWA, здорово создавать все вручную: это отличный способ изучить все основные принципы построения прогрессивных веб-приложений.

Когда вы ознакомитесь со всеми важными аспектами, вы можете начать использовать несколько инструментов, которые помогут вам повысить эффективность разработки.

Как и в большинстве сценариев разработки, существуют платформы, позволяющие ускорить и повысить эффективность разработки PWA.

Каждая из этих платформ использует определенные методы CSS, чтобы гарантировать, что процесс разработки является поддерживаемым, масштабируемым и удовлетворяет потребности как разработчика, так и конечного пользователя.

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

Ниже мы предложим ряд структур / инструментов, которые могут быть использованы для помощи в разработке PWA.

Тем не менее, совет: фреймворки значительно увеличивают производительность.

Мы рекомендуем вам использовать эти ресурсы только в начале, в конечном итоге отказавшись от их использования и перейдя к минималистичным, скудным таблицам стилей, используя независимый от платформы дизайн.

1. Создать приложение React

Создать приложение React

В React имеются все компоненты, позволяющие разрабатывать PWA с использованием таких библиотек, как Create React App .

Это отличный пример создания React PWA с этой библиотекой .

2. Угловой

угловатый

Учитывая, что Angular является продуктом Google, и мы видим, что компания продвигает PWA, поэтому неудивительно, что Angular имеет полную поддержку PWA.

Если вы привыкли работать с Angular, вы можете рассмотреть возможность использования этого в качестве предпочтительного фреймворка.

Angular 2+ изначально поддерживает реализацию функций PWA (таких как сервисные работники и файлы манифеста) с помощью следующих команд:

 ng add @angular/pwa --project project_name

Это отличная статья, которая поможет вам создать PWA с Angular .

ионный

ионный

Ionic — еще одна структура для PWA. Рамки

  • использует Angular для создания собственных приложений с использованием веб-технологий
  • использует Cordova для запуска приложения на таких устройствах, как телефоны
  • имеет встроенный сервисный работник и поддержку манифеста.

Это платная платформа премиум-класса, включающая ряд ориентированных на разработчиков и командных функций, таких как быстрое создание прототипов, для ускорения разработки.

PWA и производительность

Одной из основ прогрессивных веб-приложений остается быстрое и привлекательное взаимодействие с пользователем.

По этой причине, при рассмотрении CSS, нужно быть уверенным в том, что все должно быть максимально скудным и минималистичным.

Это один из аспектов, где фреймворки начинают страдать. Они добавляют дополнительные CSS-ресурсы, которые вы не используете, что может снизить производительность в PWA.

Несколько соображений, которые вы можете иметь в виду:

  • использовать HTTP / 2 на вашем сервере
  • используйте такие подсказки как rel=preload
  • использовать NetworkInformationAPI и реализацию кэширования для доступа к кэшированным ресурсам, а не для их загрузки
  • встроенный критический CSS непосредственно в HTML-документ для оптимизации производительности — что обычно должно быть сделано для чего-либо выше сгиба
  • сохранить ресурсы как можно меньше и как можно меньше
  • минимизируйте все ваши CSS-ресурсы и реализуйте другие оптимизации, такие как сжатие ресурсов, оптимизация изображений и использование оптимизированных форматов изображений и видео.

В рекомендациях Google по производительности есть и другие детали, о которых вам следует помнить.

Google Lighthouse

Говоря о производительности, Google Lighthouse — это инструмент для мониторинга производительности, специально ориентированный на повышение производительности как веб-сайтов, так и прогрессивных веб-приложений.

Маяк

Lighthouse , который раньше был плагином для Chrome, сегодня встроен в инструменты разработчика Chrome. Его можно использовать для запуска тестов в прогрессивном веб-приложении. Тест генерирует отчет, который содержит множество деталей, чтобы помочь вам поддерживать разработку в рамках параметров производительности PWA.

Завершение

Совместное использование CSS и PWA имеет несколько отличий от использования CSS для разработки веб-приложения или веб-сайта (особенно с точки зрения производительности и отзывчивости). Тем не менее, большинство методов, которые могут использоваться с веб-разработкой, могут быть соответствующим образом приняты для разработки прогрессивных веб-приложений. Используете ли вы фреймворки или строите все с нуля, сравнивайте преимущества с недостатками, принимайте обоснованное решение и затем придерживайтесь его.