JS анимация с "will-change" против "transformZ(0)"

Я пробовал анимацию JavaScript и заметил различия в производительности, когда я использовал will-change собственность и transform3D() разделить анимированный элемент на новый слой для рендеринга GPU. Бывает когда пытаюсь оживить scaling элемента, который также имеет border-radius собственность css. Codepen здесь

Без will-change Браузер свойств выполнит дополнительную Rasterize Paint (в теме растеризатора 1 на скриншоте)

С will-change действия Rasterize Paint нет ( скриншот).

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

Итак, вопрос: как will-change удается обеспечить такую ​​оптимизацию, хотя она должна делать в основном то же самое, что и transformZ(0) (создание нового слоя для gpu-рендеринга). И есть ли способ оптимизировать эту анимацию без использования will-change?

0 ответов

will-change в основном делает то же самое (на сегодняшний день), что и translateZ(0) hack: он вытягивает элемент на новый слой рендеринга. Разница в том, что will-change сообщает браузеру ваше намерение, а именно, что вы будете изменять это свойство; тогда как с translateZ(0) это просто случайный побочный эффект.

Так will-change это просто более современный способ выполнить то же самое, и как таковой, он также менее широко поддерживается, чем 3D-преобразования.

Это возможно, что will-change со временем станет более сильным. Я могу себе представить, что он используется для изменения цвета (с использованием шейдера графического процессора), конкретных изменений позиционирования (например, положения абсолютно позиционированного элемента) и так далее.

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