☕ 5 способов создания DOM-элементов из HTML-строк методами JavaScript
   |  
 Создание DOM-элементов из строк обеспечивает:  |  
 - Динамическое создание контента – можно добавлять новые элементы на страницу без перезагрузки.
 -   Гибкость – можно легко генерировать HTML на основе данных, полученных от пользователя или с сервера.
 - Шаблонизацию – поскольку упрощает создание повторяющихся структур HTML.
 - Управление интерфейсом – помогает создавать интерактивные элементы, которые реагируют на действия пользователя.
 
  |  
   Почти все современные JavaScript-фреймворки и библиотеки предоставляют удобные инструменты для создания DOM-элементов из HTML-строк – это одна из основных задач, которую они решают. Если же нужно обойтись возможностями ванильного JavaScript, то это можно сделать несколькими разными способами.  |  
   Это самый известный метод: он позволяет вставить строку HTML внутрь атрибута innerHTML контейнера и затем получить доступ к созданному узлу DOM. Однако он может обрабатывать только допустимые узлы HTML – к примеру, попытка вставить элемент <tr> в <div> приведет к тому, что узел не будет создан. Кроме того, этот метод не выполняет скрипты в HTML-строках, что делает его безопасным при работе с непроверенным содержимым.     |  
   Использование тега <template> снимает ограничения на содержимое – он может содержать любую HTML-структуру, включая элементы, связанные с таблицами – <tr> и <td>.  |  
 Как и innerHTML, этот метод обрабатывает только допустимые HTML-узлы и не выполняет скрипты.  |  
 Этот метод работает медленнее остальных, поскольку он разбирает строку, создавая полный HTML-документ, и только потом извлекает узел из документа. Он также может обрабатывать только допустимые узлы HTML и не выполняет скрипты.  |  
 Range.createContextualFragment  |  
   Самый простой, но не безопасный метод – выполняет скрипты. Поэтому при его использовании необходимо очищать данные для защиты от XSS – например, с помощью DOMPurify.  |  
   SVG-графика предоставляет нам стандартизированный способ создания изображений и иконок, которые можно отображать в любом размере без потери качества изображения. Но разобраться в методах SVG не так-то просто. На помощь придет интерактивный справочник SSSVG.  |  
 SSSVG поможет быстро понять принцип работы всех основных атрибутов  |  
   Этот «Тетрис» сделан полностью на SVG  |  
   Псевдокласс :has() открывает новые возможности для творческих экспериментов в CSS, позволяя создавать сложные и интерактивные дизайны без использования JavaScript. Это первый родительский селектор, позволяющий стилизовать элемент в зависимости от его содержимого. Все невероятные возможности :has() продемонстрированы в интерактивном гайде CSS :has() Interactive Guide.    |  
 В гайде подробно разобраны десятки примеров использования :has()  |  
 Plasmic – опенсорсный визуальный конструктор для создания сайтов и веб-приложений на React со множеством функций:    |  
   - Можно интегрировать с существующими React-проектами.
 - Можно использовать как CMS. 
 - Позволяет подключать разные источники данных и бэкенд-сервисы.
 - Совместим с Next.js и Gatsby.
 - Поддерживает оптимизацию производительности, включая статическую генерацию сайтов и оптимизацию изображений.
   |  
 article-extractor – эта библиотека Node.js извлекает текст статей, метаданные и ссылки на изображения по URL.  |  
   Turndown – Node.js-библиотека для конвертирования HTML в Markdown. Отлично работает в связке с предыдущим инструментом.  |  
   article-extractor + turndown подготовят контент для LLM  |  
 15 полезных расширений VS Code для фронтендера  |  
 -   Auto Rename Tag – при переименовании HTML-тега автоматически обновляет парный тег.
 - Code Spell Checker – находит опечатки в именах переменных и других идентификаторах.
 -   DotEnv – добавляет цветовое оформление и улучшает читаемость файлов с переменными окружения.
 -   Docker – добавляет вкладку для удобной работы с контейнерами, если вы используете Docker.
 -   ESLint – выявляет проблемы в коде (нарушения форматирования или потенциальные ошибки) на лету.
 -   Figma – позволяет встраивать и просматривать файлы дизайна Figma прямо в VS Code.
 - GitHub Copilot – предлагает AI-генерируемые подсказки во время набора кода.
 -   Copilot Chat – предоставляет окно чата в стиле ChatGPT прямо в редакторе.
 - GraphQL – набор расширений, упрощающих работу с GraphQL.
 -   Import Cost – показывает размер импортируемых пакетов, помогая выявить потенциальное раздувание кода.
 -   Live Server – запускает локальный сервер с автоматической перезагрузкой, что удобно для предварительного просмотра изменений.
 -   Live Share – позволяет программировать в команде с другими разработчиками, работая в одном редакторе в реальном времени.
 -   Markdown Preview Enhanced – предоставляет живой предпросмотр Markdown-файлов во время редактирования.
 -   Notes – удобный блокнот для хранения заметок по проекту, инструкций по настройке и т. д.
 -   Hinty – предоставляет динамические подсказки в реальном времени. Помогает избегать повторения распространенных ошибок и соблюдать стандарты написания кода в команде.
 
  |  
   ⚛️ Как выбрать оптимальную стратегию рендеринга
   |  
   Рендеринг – это процесс превращения кода в контент. За годы развития интернета эта технология прошла долгий путь – от формирования простейших HTML-страниц на стороне сервера до динамического обновления интерактивных приложений без перезагрузки. Сейчас в ходу несколько методов рендеринга:  |  
 - Генерация статических сайтов (предварительно генерирует HTML-страницы во время сборки приложения).
 -   Генерация на стороне сервера (генерирует полный HTML для страницы при каждом запросе).
 - Генерация на стороне клиента (использует JavaScript для рендеринга контента в браузере пользователя).
 - Инкрементальная статическая регенерация (позволяет обновлять отдельные страницы после сборки сайта).
 -   Частичный пререндеринг (экспериментальный подход, который стремится автоматически оптимизировать стратегии рендеринга).
 
  |  
   Эти методы по-разному подходят к оптимизации работы приложения, SEO и пользовательского опыта. Их можно комбинировать – это позволяет по максимуму использовать сильные стороны, нивелировать недостатки и обеспечить оптимальный баланс производительности, свежести данных и интерактивности. Разработчики Vercel (эта компания создала Next.js) написали подробную статью о преимуществах и недостатках каждого подхода и о том, как их лучше комбинировать.    Генератор статических сайтов (SSG)
  Идеально подходит для страниц с редко меняющимся контентом, макетов сайтов, документации и лендингов, для которых важна максимальная скорость загрузки.
  Преимущества:
     |  
 -   Самая быстрая загрузка страниц.
 - Отличные показатели SEO.
 - Самая низкая нагрузка на сервер.
 - Низкие затраты на инфраструктуру.
 
  |  
 - Увеличенное время сборки для сайтов с большим количеством страниц.
 - Обновление контента требует новой сборки и развертывания.
 
  |  
 Рендеринг на стороне сервера (SSR)   Идеально подходит для персонализированных дашбордов, лент соцсетей и визуализации данных в реальном времени.  Преимущества:
  |  
 - Всегда отдает свежий, актуальный контент.
 -   Показатели SEO и времени загрузки данных лучше, чем при рендеринге на стороне клиента.
 
  |  
 - Загрузка происходит медленнее, чем при использовании SSG или ISR.
 -   Показатель времени до первого байта (TTFB) может быть неудовлетворительным.
 - Потребляет больше серверных ресурсов.
 
  |  
 Инкрементальная статическая регенерация (ISR)    Подходит для случаев, когда сборка с SSG занимает слишком много времени. Используется для страниц продуктов в e-commerce, новостных порталов и крупных контентных сайтов.
  Преимущества:
  |  
 - Сохраняет быструю загрузку страниц, как у SSG.
 - Позволяет обновлять контент по требованию без полной пересборки.  
 - Эффективно масштабируется на большое количество страниц.
 - Может быть экономичнее, чем SSR, в некоторых случаях.
 
  |  
 - Требует тщательного управления стратегиями инвалидации кэша.
 
  |  
 Рендеринг на стороне клиента (CSR)   Подходит для интерактивных элементов страницы, требующих немедленной обратной связи, админ-панелей с данными в реальном времени и приложений типа Notion, которые непрерывно синхронизируют вводимые пользователем данные с сервером.  Преимущества:
  |  
 - Самый интерактивный пользовательский опыт.
 -   Плавные переходы между состояниями приложения.
 - Взаимодействие с внешними данными в реальном времени.
 
  |  
 - Начальная загрузка может быть медленнее из-за необходимости загрузки JavaScript-бандла.
 -   Оптимизация Core Web Vitals может быть сложной.
 - Требует тщательного управления состоянием на клиенте.
 
  |  
   Частичный пререндеринг (PPR)    PPR призван объединить преимущества других стратегий рендеринга и потенциально может стать стандартным подходом для веб-приложений в будущем.
  Преимущества:
  |  
 - Мгновенная загрузка страницы (как у SSG).
 - Плавная потоковая передача динамического контента.
 - Улучшенная производительность с меньшими затратами на разработку.
 
  |     -   Все еще находится в стадии исследований и разработки.
 - Может потребовать рефакторинга кода для включения в существующий проект.
 
  |  
 Выбор стратегии рендеринга  |  
 При выборе стратегии рендеринга нужно учитывать следующие факторы.  Как часто обновляется контент?
  |  
 - Статический контент лучше всего обрабатывать генератором статических сайтов.
 - Для вывода периодически обновляемого контента отлично подходит инкрементальная статическая регенерация.
 -   Обновление контента в реальном времени требует серверного или клиентского рендеринга.
 
  |  
 Для повышения производительности нужно стремиться к максимальному использованию SSG и ISR, прибегая к SSR только в случае необходимости получения абсолютно свежих данных.  Насколько важно продвижение страницы в поисковых системах?
  |  
 - Хотя Google может рендерить JavaScript на стороне клиента, ключевые показатели Core Web Vitals все еще сильно влияют на ранжирование.
 -   Высоких показателей CWV легче добиться на статических и серверных страницах, чем на страницах с клиентской загрузкой внешних данных.
 
  |  
 Насколько активно пользователь будет взаимодействовать со страницей?  |  
 -   Если страница в основном статическая с минимальным взаимодействием, используйте SSG или ISR с небольшим количеством клиентского JavaScript.
 - В противном случае может потребоваться SSR (с гидратацией на стороне клиента).
 
  |  
 Каковы требования к скорости загрузки?  |  
 -   Для максимально быстрой начальной загрузки используйте SSG или ISR с редкой инвалидацией.
 - Чтобы сбалансировать свежесть данных и скорость, используйте ISR или SSR (для актуальных данных).
 - CSR может обеспечить данные в реальном времени, но часто за счет начальной загрузки.
 
  |  
 Нужно ли персонализировать контент?  |  
 -   Если вам нужен персонализированный контент, скорее всего, потребуется SSR или CSR.
 - ISR может работать в случаях, когда можно кэшировать персонализированный контент, например, настройки веб-приложения.
 - SSG не позволяет персонализировать контент.
 
  |  
  |  
  |  
     Понравилась ли вам эта рассылка?  |  
  |  
  |  
   Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
 
   |  
  |  
  |  
  |