Content-visibility: новое свойство CSS, повышающее скорость и рендеринг сайта

Поддержка новых возможностей css стилей, которые появились в Chromium 85, могут быть один из самых новых свойств впечатляющих CSS для улучшения производительности загрузки страницы. content-visibilityпозволяет агенту пользователя пропускать работу по рендерингу элемента, включая макет и рисование, до тех пор, пока это не понадобится. Поскольку рендеринг пропускается, если большая часть вашего контента находится за пределами экрана, использование content-visibilityсвойства значительно ускоряет загрузку первоначального пользователя. Это также позволяет быстрее взаимодействовать с экранным контентом. Довольно аккуратно.

демонстрация с цифрами, представляющими результаты сетиВ нашей демонстрационной статье применение content-visibility: autoк фрагментированным областям содержимого дает прирост производительности рендеринга в 7 раз при начальной загрузке. Читайте дальше, чтобы узнать больше.

Поддержка браузера #

content-visibilityполагается на примитивы в спецификации содержания CSS . Хотя на данный момент content-visibilityподдерживается только в Chromium 85 (и считается «стоящим прототипом» для Firefox), спецификация сдерживания поддерживается в большинстве современных браузеров .

CSS сдерживание #

Ключевой и всеобъемлющей целью сдерживания CSS является обеспечение повышения производительности рендеринга веб-контента путем обеспечения предсказуемой изоляции поддерева DOM от остальной части страницы.

По сути, разработчик может сообщить браузеру, какие части страницы инкапсулированы как набор контента, позволяя браузерам рассуждать о контенте без необходимости учитывать состояние вне поддерева. Знание того, какие части контента (поддеревья) содержат изолированное содержимое, означает, что браузер может принимать решения по оптимизации рендеринга страницы.

Существует четыре типа содержания CSS , каждый из которых является потенциальным значением containсвойства CSS, которые можно объединить в список значений, разделенных пробелами:

  • size: Ограничение размера на элементе гарантирует, что блок элемента может быть размещен без необходимости изучения его потомков. Это означает, что мы потенциально можем пропустить макет потомков, если все, что нам нужно, — это размер элемента.
  • layout: Включение макета означает, что потомки не влияют на внешний макет других блоков на странице. Это позволяет нам потенциально пропускать компоновку потомков, если все, что мы хотим сделать, это расположить другие блоки.
  • style: Включение стиля гарантирует, что свойства, которые могут влиять не только на его потомков, не покидают элемент (например, счетчики). Это позволяет нам потенциально пропустить вычисление стилей для потомков, если все, что нам нужно, — это вычислить стили для других элементов.
  • paint: Покраска гарантирует, что потомки содержащего бокса не будут отображаться за его пределами. Ничто не может явно переполнить элемент, и если элемент находится за пределами экрана или по иным причинам не виден, его потомки также не будут видны. Это позволяет нам потенциально пропустить рисование потомков, если элемент находится за кадром.

Пропуск рендеринга с content-visibility #

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

Свойство content-visibility принимает несколько значений, но именно autoоно обеспечивает немедленное улучшение производительности. Элемент , который имеет content-visibility: autoприбыль layoutstyleи paintсдерживание. Если элемент находится за пределами экрана (и не имеет никакого отношения к пользователю — релевантными элементами будут те, у которых есть фокус или выделение в их поддереве), он также получает sizeсдерживание (и прекращает рисование и проверку его содержимого).

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

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

Пример: блог о путешествиях #

В этом примере мы базируем наш блог о путешествиях справа и применяем его content-visibility: autoк фрагментированным областям слева. Результаты показывают, что время рендеринга увеличивается с 232 мс до 30 мс при начальной загрузке страницы.

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

  1. Часть страницы загружается из сети вместе со всеми необходимыми ресурсами.
  2. Браузер стилизует и размещает все содержимое страницы, не учитывая, является ли содержимое видимым для пользователя.
  3. Браузер возвращается к шагу 1, пока не будут загружены все страницы и ресурсы.

На шаге 2 браузер обрабатывает все содержимое в поисках вещей, которые могли измениться. Он обновляет стиль и макет любых новых элементов, а также элементов, которые могли сместиться в результате новых обновлений. Это работа по рендерингу. На это нужно время.

Скриншот туристического блога.Пример туристического блога. См. Демонстрацию на Codepen

Теперь подумайте, что произойдет, если вы разместите content-visibility: autoкаждую из историй в блоге. Общий цикл тот же: браузер загружает и отображает фрагменты страницы. Однако разница заключается в объеме работы, выполняемой на шаге 2.

Благодаря видимости содержимого он будет стилизовать и разметить все содержимое, которое в настоящее время отображается пользователю (оно отображается на экране). Однако при обработке истории, которая полностью находится за пределами экрана, браузер пропустит работу по рендерингу и только создаст стиль и макет самого блока элемента.

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

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

Аннотированный снимок экрана с разбивкой содержимого на разделы с помощью класса Css.Пример разделения содержимого на разделы с storyприменением класса для получения content-visibility: auto. См. Демонстрацию на Codepen

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

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

Указание естественного размера элемента с помощью contain-intrinsic-size #

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

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

К счастью, CSS предоставляет другое свойство, contain-intrinsic-sizeкоторое эффективно определяет естественный размер элемента, если на элемент влияет ограничение размера . В нашем примере мы устанавливаем его 1000pxкак оценку высоты и ширины секций.

Это означает, что он будет располагаться так, как если бы у него был единственный дочерний элемент с размерами «внутреннего размера», гарантируя, что ваши блоки без размера по-прежнему занимают место. contain-intrinsic-sizeдействует как размер заполнителя вместо отображаемого содержимого.

Скрытие содержимого с помощью content-visibility: hidden #

Что делать, если вы хотите, чтобы контент не отображался независимо от того, отображается он на экране или нет, используя при этом преимущества кэшированного состояния визуализации? Введите: content-visibility: hidden.

Это content-visibility: hiddenсвойство дает вам все те же преимущества необработанного содержимого и кэшированного состояния визуализации, что content-visibility: autoи за пределами экрана. Однако, в отличие от with auto, он не начинает автоматически отображаться на экране.

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

Сравните его с другими распространенными способами скрытия содержимого элемента:

  • display: none: скрывает элемент и разрушает его состояние рендеринга. Это означает, что отображение элемента так же дорого, как отображение нового элемента с тем же содержимым.
  • visibility: hidden: скрывает элемент и сохраняет его состояние отрисовки. На самом деле это не удаляет элемент из документа, поскольку он (и его поддерево) по-прежнему занимает геометрическое пространство на странице, и на него все еще можно щелкнуть. Он также обновляет состояние рендеринга в любое время, когда это необходимо, даже когда оно скрыто.

content-visibility: hidden, с другой стороны, скрывает элемент, сохраняя его состояние визуализации, поэтому, если есть какие-либо изменения, которые должны произойти, они произойдут только тогда, когда элемент будет показан снова (то есть content-visibility: hiddenсвойство удаляется).

Некоторые отличные варианты использования content-visibility: hidden— это реализация расширенных виртуальных скроллеров и макет измерения.

Вывод #

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

Добавить в избранное -пригодится

3 КОММЕНТАРИИ

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

58 − 51 =

360 Javascript Viewer: Просмотр 360-градусных изображений на сайте — обзор и настройка

360 Javascript Viewer — это мощный инструмент для WordPress, который позволяет добавлять на сайт интерактивные 360-градусные изображения. С его помощью можно создавать эффектные визуальные...

3CX Free Live Chat, Calls & WhatsApp: Интеграция чата, звонков и WhatsApp на сайт — обзор и настройка

В современном мире онлайн-коммуникаций важно предоставлять клиентам удобные способы связи. Плагин 3CX Free Live Chat, Calls & WhatsApp позволяет интегрировать на ваш сайт сразу...

3D Viewer – WP 3D Model Viewer Plugin: Просмотр 3D-моделей на сайте — обзор и настройка

3D Viewer – WP 3D Model Viewer Plugin – это мощный инструмент для интеграции 3D-моделей на ваш сайт, созданный специально для WordPress. Этот плагин...

99minds Giftcard: Настройка подарочных карт для WooCommerce — обзор и настройка

Подарочные карты — это отличный способ привлечь новых клиентов и повысить лояльность существующих. Если вы используете WooCommerce для управления своим интернет-магазином, то плагин 99minds...

A WordPress Testimonial Plugin to Showcase Testimonial Slider, Testimonial Grid and More: Solid Testimonials: Управление отзывами и рекомендациями — обзор и настройка

Solid Testimonials — это мощный и гибкий плагин для WordPress, который позволяет легко управлять отзывами и рекомендациями на вашем сайте. С его помощью вы...

ACF: Better Search: Улучшение поиска с помощью Advanced Custom Fields — обзор и настройка

Если вы используете WordPress и Advanced Custom Fields (ACF) для создания кастомных полей, то наверняка сталкивались с проблемой поиска по этим полям. Встроенный поиск...

AI Image Generator by ChatGPT: Генерация изображений с помощью ChatGPT — обзор и настройка

AI Image Generator by ChatGPT — это инновационный плагин для WordPress, который позволяет создавать уникальные изображения с помощью искусственного интеллекта. Этот инструмент идеально подходит...

AI Proposal Builder: Создание предложений с помощью искусственного интеллекта — обзор и настройка

AI Proposal Builder — это инновационный плагин для WordPress, который позволяет автоматизировать процесс создания профессиональных предложений с помощью искусственного интеллекта. Этот инструмент идеально подходит...

AI Writer: Content Generator GPT | ChatGPT: Генерация контента с помощью GPT и ChatGPT — обзор и настройка

AI Writer: Content Generator GPT | ChatGPT — это мощный инструмент для автоматизации создания контента на основе искусственного интеллекта. Этот плагин позволяет генерировать тексты,...

ПОХОЖИЕ СТАТЬИ

Решение проблем с Mysql в WordPress, основные ошибки и их решения

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

Использование MariaDB Galera Cluster для WordPress

Использование MariaDB Galera Cluster для WordPress может быть важным шагом в создании высоконадёжной и масштабируемой платформы для вашего сайта. Galera Cluster позволяет вам иметь...

Как восстановить MySQL или MariaDB базу данных WordPress

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

Как восстановить WordPress из резервной копии базы данных MySQL или MariaDB

При возникновении проблем с вашим веб-сайтом на WordPress, резервная копия базы данных становится вашим лучшим другом. Как только ошибка или сбой происходят, наличие под...

Как восстановить резервную копию базы данных MySQL или MariaDB для WordPress

Восстановление резервной копии базы данных MySQL или MariaDB для WordPress — это задача, которая требует своего рода изящества и внимательности. Если ваша база данных...

Как изменить версию базы данных MySQL или MariaDB в WordPress

Изменение версии базы данных MySQL или MariaDB в WordPress может стать довольно актуальной задачей для веб-разработчиков и администраторов сайтов. Иногда это нужно для улучшения...

Как изменить движок базы данных MySQL или MariaDB в WordPress

Изменение движка базы данных MySQL или MariaDB в WordPress может показаться сложной задачей, но на самом деле, это процесс, который можно выполнить с минимальными...

Как изменить имя пользователя базы данных MySQL или MariaDB в WordPress

Изменение имени пользователя базы данных MySQL или MariaDB в WordPress может показаться сложной задачей, но на самом деле это всего лишь несколько простых шагов....

Как изменить кодировку базы данных MySQL или MariaDB в WordPress

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

Как изменить кодировку таблиц базы данных MySQL или MariaDB в WordPress

Чтобы правильно работать с базами данных в WordPress, важно понимать, какую роль играют кодировки. Исправление кодировки таблиц базы данных MySQL или MariaDB может предотвратить...

Как изменить пароль базы данных MySQL или MariaDB в WordPress

Изменение пароля базы данных MySQL или MariaDB в WordPress – это важный шаг для обеспечения безопасности вашего сайта. Если вы не наделали ошибок и...

Как изменить порт базы данных MySQL или MariaDB в WordPress

Чтобы изменить порт базы данных MySQL или MariaDB в WordPress, необходимо разобраться с тем, как это влияет на работу вашего сайта и какие шаги...
OK2WEB
OK2WEB
Более 12 лет занимаюсь разработкой и продвижением сайтов. Городские порталы, информационные и новостные сайты. Сейчас в основном разрабатываю интернет магазины и коммерческие сайты. Если у вас есть вопросы пишите, стараюсь оперативно ответить и помочь.