Позволит ли оптимизация CSS3-анимации без отключения H/W ускорить ее запуск на GPU?
Сначала это звучит странно, но терпите меня.
Я написал бенчмарк на основе setTimeout (аналог stats.js) - идея была в том, чтобы было что сравнить, как анимация работает в разных условиях (например, добавление к ней различных свойств CSS3). Для (простого) примера у меня было бы что-то с вращением и анимированной тенью, затем я бы убрал вращение во втором прогоне и box-shadow в третьем прогоне. После этого у меня было 3 контрольных числа, чтобы сравнить, как работает каждая из этих анимаций.
Это работает хорошо до тех пор, пока анимация не ускоряется графическим процессором (по очевидным причинам, т. Е. Ускорение H/W удаляет анимацию из однопроцессной структуры страницы).
Но это также подводит меня к вопросу на миллион долларов - если я оптимизирую что-то для лучшей работы без GPU-ускорения, значит ли это, что такая же оптимизированная анимация будет работать лучше (быстрее или с меньшим использованием памяти) с включенным GPU-ускорением? Или применяются другие правила?
Позвольте мне привести более простой пример. CSS3 box-shadow убьет производительность практически в любой анимации. В более простых случаях вы можете повысить производительность, заменив CSS3 box-shadow растровым (PNG?) Изображением аналогичной тени. Однако при включенном графическом процессоре преимущества этого не столь очевидны невооруженным глазом, потому что обе анимации выглядят почти одинаково быстрыми (потому что, опять же, я не могу отследить изменение производительности при включенном графическом процессоре). Итак, еще раз - применяются ли те же правила к GPU-on и -off?
Мой первоначальный импульс был - когда что-то оптимизировано - оно работает лучше, независимо от того, включен или выключен GPU. Но, как я уже упоминал в комментарии ниже (и, пожалуйста, исправьте меня, если я не правильно понял), но элемент с аппаратным ускорением кэшируется как предварительно обработанная растровая текстура на графическом процессоре. Если это правда - зачем тогда будет какая-то разница, если моя тень - это блочная тень CSS3 или тень PNG на основе изображения? Я имею в виду, что оба эти элемента с помощью GPU просто превратятся в растеризованную текстуру, верно? Так что моя оптимизация больше не будет иметь смысла при включенном GPU? (если только не будет разницы в использовании памяти снова...)
1 ответ
Да, конечно. Посмотрите здесь немного о том, что ускорение графического процессора делает и не влияет. Но общая идея - да, она сохранит большинство ваших оптимизаций. Теперь, насколько данная оптимизация повлияет на производительность после разгрузки графического процессора, в относительном смысле. Это сложный вопрос.