Хук рендеринга в браузере

Предоставляют ли браузеры какой-либо хук перед рендерингом, где вы можете применять изменения к стилям элементов DOM до их рендеринга?

Например, я могу изменить цвет всего, что красный, на зеленый.

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

  • Разбор CSS и Javascript веб-страницы для определения стилей элементов. Это кажется излишним, так как браузер также делает это
  • Сканирование DOM и проверка вычисленных стилей каждого элемента и переопределение вещей. Это работает, но если элементы изменяются динамически, нам приходится многократно сканировать изменения, которые могут быть тяжелыми.

Так существует ли такой браузерный хук? Если нет, то какой альтернативный подход вы бы порекомендовали?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
240
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Нет никакого хука рендеринга для каждого элемента, нет. Вы можете запросить обратный вызов непосредственно перед рендерингом следующего кадра (обычно 60 кадров в секунду) через requestAnimationFrame, но это не лучшее место для проверки, о которой вы думаете.

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

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

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

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

rohit-biswas 20.01.2019 16:58

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

T.J. Crowder 20.01.2019 17:00
Ответ принят как подходящий

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

ОригиналOriginal

Темный читатель визуализировался

Dark reader использует js для анализа css и стилей и внедряет собственные стили CSS на страницу для получения необходимого эффекта.

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

И Dark Reader, и Project Houdini очень актуальны. Благодаря тонну!

rohit-biswas 20.01.2019 19:18

Другие вопросы по теме