Добавьте персонализацию в статический HTML с помощью Netlify Edge Functions — JavaScript в браузере не требуется

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

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

Отличная новость заключается в том, что с помощью Netlify Edge Functions вы можете добиться динамической персонализации без использования JavaScript на стороне клиента, что обеспечивает отличную работу разработчиков и еще лучший результат для конечного пользователя. Кроме того, нет необходимости в накладных расходах, связанных с использованием front-end фреймворка, просто чтобы получить эту возможность в своих проектах.

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

Развертывание кода учебника в Netlify

Если вы хотите немедленно приступить к работе, вы можете форкнуть репозиторий кода учебника на GitHub и развернуть сайт на своей учетной записи Netlify за считанные секунды. Нажмите на кнопку «Развернуть в Netlify» ниже и попробуйте!

Создайте сайт с нуля

В качестве альтернативы, если вы хотите создать код с нуля, вы можете следовать приведенному ниже руководству для создания упрощенной версии проекта, без функции hello world Edge Function, включенной в видеоурок.

Предварительные условия

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

  • Node.js (рекомендуется LTS)
  • GitHub CLI
  • Netlify CLI

Настройка проекта для обслуживания статических HTML-файлов

В новом каталоге проекта создайте каталог public. Внутри нее добавьте файл index.html и файл с именем hello-template.html.

Добавьте несколько основных шаблонов в файл index.html (если вы используете VSCode, вы можете ввести ! с последующей клавишей tab в HTML-файл, чтобы создать некоторые HTML-шаблоны), или вы можете скопировать и вставить файл из репозитория учебника.

Далее добавьте аналогичный шаблон в hello-template.html, а также некоторое содержимое-заполнитель, которое мы заменим с помощью функции Edge Function в следующем шаге. Мы собираемся заменить заполнитель данными геолокации, поэтому я назвал свой заполнитель LOCATION_UNKNOWN.

Далее мы настроим проект на обслуживание этих двух статических HTML-файлов из публичной директории с помощью файловой конфигурации Netlify. В корень проекта добавьте файл netlify.toml. Это файл конфигурации, который определяет, как Netlify собирает и развертывает ваш сайт — включая перенаправления, настройки ветвления, маршрутизацию граничных функций и многое другое.

Добавьте следующий код в netlify.toml, чтобы указать Netlify обслуживать ваши статические файлы из публичной директории.

[build]
  publish = "/public"
Вход в полноэкранный режим Выход из полноэкранного режима

Давайте проверим, все ли подключено. В окне терминала в корне вашего проекта выполните следующую команду, чтобы запустить сервер разработки с помощью Netlify CLI:

netlify dev
Войти в полноэкранный режим Выйти из полноэкранного режима

Когда сервер разработки будет запущен, перейдите в браузер, и вы увидите index.html на http://localhost:8888 и hello-template.html на http://localhost:8888/hello-template. Теперь вы готовы преобразовать этот статический HTML-файл с помощью функции Edge Function!

Преобразование HTTP-ответа с помощью функции Edge Function

Мы напишем Edge-функцию, которая перехватит запрос к hello-template с помощью параметра запроса URL (?method=transform), возьмет данные геолокации из запроса и преобразует ответ HTTP, чтобы включить название города и страны.

Функции Edge Functions можно писать с помощью JavaScript или TypeScript. В этом учебнике мы будем писать код Edge Function на JavaScript. Файлы Edge Function находятся в специальном каталоге, чтобы Netlify знал, как их упаковать при развертывании сайта. В корне вашего проекта создайте каталог netlify, а внутри него добавьте каталог edge-functions. Создайте новый файл в каталоге edge-functions и назовите его transform-hello-template.js.

Прежде чем писать код функции Edge Function, давайте подключим файл к среде разработки. В ваш файл netlify.toml добавьте следующий код, ниже настроек сборки. Это указывает Netlify запускать функцию transform-hello-template, когда пользователь запрашивает страницу hello-template в браузере. Остановите и запустите сервер разработки, чтобы CLI принял изменения в netlify.toml.

# netlify.toml

[[edge_functions]]
  path = "/hello-template"
  function = "transform-hello-template"
Вход в полноэкранный режим Выйдите из полноэкранного режима

В transform-hello-template.js добавьте следующий код. И давайте распакуем, что он делает.

// netlify/edge-functions/transform-hello-template.js

export default async (request, context) => {
  const url = new URL(request.url);

  // Look for the "?method=transform" query parameter
  // return if we don't find it
  if (url.searchParams.get("method") !== "transform") {
    return;
  }

  // Get the page content that will be served next
  // In this tutorial, it will be the content from hello-template
  const response = await context.next();
  const page = await response.text();

  // Search for the placeholder
  const regex = /LOCATION_UNKNOWN/i;

  // Get the location from the Context object
  const location = `${context.geo.city}, ${context.geo.country.name}`;

  // Replace the content with the current location
  const updatedPage = page.replace(regex, location);

  // Return the response
  return new Response(updatedPage, response);
};
Вход в полноэкранный режим Выход из полноэкранного режима

Мы начинаем с экспорта стандартной асинхронной функции. Edge-функции принимают два параметра, request — который представляет входящий HTTP-запрос, и context — который является специфическим API Netlify, раскрывающим геолокационные данные, позволяющим работать с куки, перезаписью, информацией о сайте и многим другим.

Сначала мы разбираем URL из запроса. Затем мы ищем параметр запроса method=transform в URL, используя url.searchParams.get(). Если мы не находим требуемый параметр запроса в URL, мы возвращаемся и выходим из функции Edge Function раньше времени, которая будет обслуживать шаблон hello с неизменным заполнителем.

Если мы находим ?method=transform в URL, мы используем context.next() для захвата следующего запроса в цепочке HTTP — в данном случае это наш файл hello-template — и затем мы захватываем текстовое содержимое page, присваивая его переменной page. Далее мы используем регулярное выражение для поиска в тексте hello-template местодержателя, который мы хотим заменить геолокационными данными.

Геолокационные данные доступны в объекте context, как context.geo. Используя интерполяцию строк JavaScript, мы можем построить дружественную, читабельную строку, состоящую из названия города и страны, которую затем используем для замены строки, найденной регулярным выражением.

Наконец, мы возвращаем новый HTTP-ответ, содержащий обновленную страницу. Перейдите в браузере по следующему URL: http://localhost:8888/hello-template?method=transform — и вы увидите, что местоположение страницы обновлено геолокационными данными, полученными с помощью Edge! Персонализация без JavaScript: достижение получено! 🏆

Добавьте контроль версий git

Теперь, когда проект работает локально, у нас есть несколько вариантов того, как развернуть его в Netlify. В этом руководстве мы подключимся к новому git-репозиторию, чтобы получить CI/CD и настроить его бесплатно.

Инициализируйте новый git-репозиторий, выполнив следующую команду:

git init
Войти в полноэкранный режим Выйти из полноэкранного режима

Поставьте и зафиксируйте свои файлы:

git add . # stage your files
git commit -m 'Initial commit' # commit your files with a commit message
Войти в полноэкранный режим Выйти из полноэкранного режима

Следующие шаги помогут вам добавить ваш репозиторий в GitHub с помощью GitHub CLI — но вы можете отправить свой проект в GitHub любым удобным для вас способом.

Выполните следующую команду в терминале, чтобы создать новый репозиторий, подключенный к вашей учетной записи GitHub:

gh repo create
Войти в полноэкранный режим Выйти из полноэкранного режима

В ответ на запрос о типе репозитория, который вы хотите создать, выберите: Push an existing local repository to GitHub. Следуйте оставшимся подсказкам, чтобы заполнить соответствующие детали проекта. Теперь вы готовы к развертыванию в Netlify!

Развертывание в Netlify с помощью Netlify CLI

Если вы еще не вошли в Netlify CLI, выполните следующую команду в терминале и следуйте подсказкам для авторизации в Netlify (откроется окно браузера).

netlify login
Войти в полноэкранный режим Выход из полноэкранного режима

Далее выполните следующую команду для инициализации нового проекта на Netlify.

netlify init
Войти в полноэкранный режим Выйти из полноэкранного режима

Заполните следующие подсказки для настройки нового проекта:

  • Что вы хотите сделать? Создать и настроить новый сайт.
  • Команда: YOUR_TEAM
  • Название сайта (необязательно): CHOOSE_UNIQUE_SITE_NAME

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

  • Ваша команда сборки (hugo build/yarn run build/etc): (мы не используем фреймворк или скрипт сборки, поэтому это поле остается пустым!)
  • Каталог для развертывания (пустой для текущего каталога): (public)
  • Папка функций Netlify: (netlify/functions)

Подождите несколько секунд… и ваш новый сайт развернут! 🎉

Выполните следующие команды в терминале, чтобы открыть сайт в браузере и открыть панель администратора Netlify.

netlify open:site # open the site in your browser
netlify open:admin # open the Netlify admin panel in your browser
Войти в полноэкранный режим Выйти из полноэкранного режима

И все готово! Теперь вы можете испытать свою no-JavaScript-personalization-at-the-edge, отправив URL сайта своим друзьям и продемонстрировав свои новые, блестящие навыки!

Заключительные мысли

Когда мы говорим о новых возможностях, которые предоставляют нам функции Edge как разработчикам и пользователям Интернета, часто возникает вопрос: «Должен ли я теперь все перевести на Edge?». Хотя ответ обычно звучит так: «Смотря что», всегда стоит рассматривать эти новые инструменты и технологии как дополнение к развивающейся веб-экосистеме, а не как замену существующих возможностей.

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

И я, со своей стороны, с нетерпением жду, что еще будет впереди.

Оцените статью
devanswers.ru
Добавить комментарий