Производительность CSS относительно translateZ(0)
ряд блогов выразили прирост производительности в "обмане" GPU, чтобы думать, что элемент является 3D с помощью transform: translateZ(0) для ускорения анимации и переходы. Мне было интересно, есть ли последствия для использования этого преобразования следующим образом:
* {
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
}
5 ответов:
преобразования CSS создают новый контекст стекирования и содержащий блок, как описано в спец. на простом английском языке это означает, что фиксированные элементы положения с преобразованием, примененным к ним, будут действовать больше как абсолютно позиционированные элементы, и
z-indexзначения, скорее всего, поимеют с.Если вы посмотрите на демо, вы увидите, что я имею в виду. Второй div имеет преобразование, примененное к нему, что означает, что он создает новый контекст стекирования, а псевдо-элементы укладываются сверху, а не снизу.
Так что в принципе, не делайте этого. Применяйте 3D-преобразование только тогда, когда вам нужна оптимизация.
-webkit-font-smoothing: antialiased;это еще один способ использовать 3D-ускорение без создания этих проблем, но он работает только в Safari.
Если вы хотите последствий, в некоторых сценариях производительность Google Chrome ужасна с включенным аппаратным ускорением. Как ни странно, изменив "трюк" на
-webkit-transform: rotateZ(360deg);работала просто отлично.Я не верю, что мы когда-нибудь выяснил, почему.
это заставляет браузер использовать аппаратное ускорение для доступа к графическому процессору устройства (GPU), чтобы заставить пиксели летать. Веб-приложения, с другой стороны, работают в контексте браузера, что позволяет программному обеспечению выполнять большую часть (если не все) рендеринга, что приводит к уменьшению мощности для переходов. Но интернет догоняет, и большинство поставщиков браузеров теперь обеспечивают графическое аппаратное ускорение с помощью определенных правил CSS.
используя
-webkit-transform: translate3d(0,0,0);будет пипец графический процессор в действие для CSS-переходов, что делает их более плавными (выше FPS).Примечание:
translate3d(0,0,0)ничего не делает с точки зрения того, что вы видите. Он перемещает объект на 0px по осям x,y и Z. Это всего лишь техника для форсирования аппаратного ускорения.хорошо читайте здесь: http://www.smashingmagazine.com/2012/06/21/play-with-hardware-accelerated-css/
Я могу засвидетельствовать, что
-webkit-transform: translate3d(0, 0, 0);будет возиться с новымposition: -webkit-sticky;собственность. С помощью шаблона навигации левого ящика, над которым я работал, аппаратное ускорение, которое я хотел с помощью свойства transform, мешало фиксированному позиционированию моей верхней навигационной панели. Я выключил трансформацию, и позиционирование работало нормально.к счастью, у меня, кажется, уже было аппаратное ускорение, потому что у меня было
-webkit-font-smoothing: antialiasedна html-элементе. Я тестировал это поведение в iOS7 и Андроид.
на мобильных устройствах отправка всего на GPU вызовет перегрузку памяти и сбой приложения. Я столкнулся с этим в приложении для iPad в Кордове. Лучше всего отправлять только необходимые элементы на GPU, дивы,которые вы специально перемещаете.
еще лучше, используйте 3d
переходпреобразования, чтобы сделать анимацию, как translateX (50px) в отличие от левого: 50px;
Comments