/ 

Accelerated Mobile Pages

Последнюю неделю я переделывал блог с использованием Google Accelerated Mobile Pages Project (далее АМП). Потом еще неделю исправлял ошибки. И теперь готов рассказать вам об этом проекте и ответить на вопросы.

Google Accelerated Mobile Pages Project
Google Accelerated Mobile Pages Project

Что это

АМП это надстройка на HTML, которая вводит кастомные элементы, ограничивает стандартные возможности и оптимизирует доставку содержимого. На практике АМП состоит из трех частей:

  • HTML — базовая разметка с надстройками и ограничениями
  • JSбиблиотека компонентов
  • Cache — АМП страница кэшируется гуглом и отдается с его серверов

В совокупности эти части ускоряют загрузку страницы.

Как ускоряет

  1. Асинхронные скрипты
  2. Определение размеров ресурсов (изображений, видео, iframe)
  3. Предотвращение блокировки визуализации механизмами расширений
  4. Устранение сторонних сценариев JavaScript из основного потока операций
  5. Все CSS должны быть встроенными и ограниченными по размеру
  6. Переключение шрифта должно быть эффективным
  7. Сокращение пересчетов стилей
  8. Запуск анимации только с аппаратным ускорением
  9. Приоритетная загрузка ресурсов
  10. Мгновенная загрузка страниц

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

Теория

Добавить АМП на сайт можно двумя способами:

  1. Создать АМП версию страниц и указать о них на основной странице
  2. Вместо основной страницы использовать АМП версию

Часто у вас нет выбора, поскольку в АМП страницах не работает JavaScript (за исключением библиотек элементов). Если функционал сайта вплотную завязан на него, то вам придется урезать его и делать отдельную АМП версию.

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

Ограничения

Выше я предупредил вас о невозможности использовать JavaScript на АМП страницах, но это не всё.

  1. У медиа файлов обязательно указание размеров
  2. Размер CSS ограничен и он должен быть заинлайнен в head
  3. У АМП страниц формата BlogPost в микроразметке обязательно указание изображения
  4. Поддерживаются последние 2 версии популярных браузеров
  5. Придется попотеть, чтобы все заработало
  6. iframe с вашего домена недоступен, если нужно что-то встроить через iframe — вам нужен другой домен или субдомен
  7. Аналитика из Яндекс.Метрики не работает, настройка метрики для AMP

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

Практика

У АМП страниц строгая разметка. Если её не соблюдать, то гугл не будет показывать страницу в выдаче.

<!doctype html>
<html amp lang="en">
  <head>
    <meta charset="utf-8">
    <title>Hello, AMPs</title>
    <link rel="canonical" href="http://example.ampproject.org/article-metadata.html" />
    <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
    <script type="application/ld+json">
      {
        "@context": "http://schema.org",
        "@type": "NewsArticle",
        "headline": "Open-source framework for publishing content",
        "datePublished": "2015-10-07T12:02:41Z",
        "image": [
          "logo.jpg"
        ]
      }
    </script>
    <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
    <script async src="https://cdn.ampproject.org/v0.js"></script>
  </head>
  <body>
    <h1>Welcome to the mobile web</h1>
  </body>
</html>

Обратите внимание на обязательный doctype и атрибут amp у html. Вместо атрибута amp можно вставить эмодзи ⚡. Каноническая ссылка ведет на основную страницу или на саму себя если у вас только АМП страница. В <script type="application/ld+json"> описывается информация о странице в формате schema.org. Тег <style amp-boilerplate> и <script async src="https://cdn.ampproject.org/v0.js"></script> так-же обязательны.

Осталось добавить ваше содержимое и стили. Как создать АМП страницу по шагам читайте в документации.

Нестандартные элементы

Для оптимизации загрузки в АМП нельзя вставить элемент img. Для этого в АМП есть свой элемент:

<amp-img src="welcome.jpg" alt="Welcome" height="400" width="800"></amp-img>

Задание размеров для изображения обязательно. Поддержка amp-img включена в библиотеку по умолчанию. Для некоторых элементов придется подгружать дополнительную библиотеку.

Советы

  1. Внимательно изучите документацию
  2. Проверяйте результат через валидатор
  3. Начинайте по чуть-чуть, не спешите переписывать весь проект
  4. Подключите гугл вебмастер к сайту и следите за ошибками в АМП
  5. Размечайте микроразметку согласно содержимому страницы, о поддерживаемых видах читайте на schema.org
  6. Расширение для хрома для проверки валидности документа (спасибо Михаилу mihdan)

Задавайте вопросы в комментариях.
Спасибо.

⌘ ⌘ ⌘
Добавляем красоты в наш Google Chrome с расширением Flickr Tab
Блог

Добавляем красоты в наш Google Chrome с расширением Flickr Tab

Новое расширение для Google Chrome — Flickr Tab, которое делает работу с каждой новой вкладкой удивительной.

Код. Плейсхолдер для [contenteditable]
Фронтенд

Код. Плейсхолдер для [contenteditable]

Placeholder полифил для contenteditable элемента

Как называть переменные
Фронтенд

Как называть переменные

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

Плавный, нативный скрол
Фронтенд

Плавный, нативный скрол

Выкиньте лишние библиотеки для прокрутки внутри страницы