Translate'e göre CSS performansıZ (0)


96

Bir dizi blog, transform: translateZ(0)animasyonları ve geçişleri hızlandırmak için GPU'yu bir öğenin 3D olduğunu düşünmek için 'kandırmanın' performans kazancını ifade etti . Bu dönüşümü aşağıdaki şekilde kullanmanın çıkarımları olup olmadığını merak ediyordum:

* {
    -webkit-transform: translateZ(0);
    -moz-transform: translateZ(0);
    -ms-transform: translateZ(0);
    -o-transform: translateZ(0);
    transform: translateZ(0);
}

6
bu blog makalelerine bağlantı verebilir misin?
Jürgen Paul

@PineappleUndertheSea bu: blog.teamtreehouse.com/… beni buraya gönderdi.

Btw, -o-transform: translateZ(0)hiçbir zaman bir şey olmadı. caniuse.com/#search=translate3d
Volker E.

@Ahmed Nuaman evet bu sadece bir numara değil. Ancak bazı uygulamalarda resmi olarak kullanılıyor. Ancak GPU'suz bir cihaza (düşük uç) sahipseniz ... Nasıl performans gösterdiğinden emin değilim. Ancak bir işlemcinin yapabildiği şey (2D Grafikler) GPU'ya delege edilirse, bunun nedeni, nihai etkisi olmamasına rağmen yalnızca 3D komutunun olmasıdır. Ve 3D, içinde birden çok çekirdek kullanır ve daha hızlı performans gösterir. Burada mantıklı olan budur. Biraz daha ... soruşturma İhtiyaçları
TooGeeky

Yanıtlar:


102

CSS dönüşümleri , spesifikasyonda açıklandığı gibi yeni bir yığın bağlamı ve içeren blok oluşturur . Düz İngilizce'de bu, onlara bir dönüşüm uygulanmış sabit konumlu öğelerin daha çok mutlak konumlandırılmış öğeler gibi davranacağı ve z-indexdeğerlerin büyük olasılıkla vidalanacağı anlamına gelir.

Bu demoya bir göz atarsanız, ne demek istediğimi göreceksiniz. İkinci div'in kendisine uygulanan bir dönüşümü vardır, yani yeni bir yığın bağlamı oluşturur ve sözde öğeler aşağıdan ziyade üstte yığılır.

Yani temelde bunu yapma. Yalnızca optimizasyona ihtiyacınız olduğunda 3B dönüşümü uygulayın. -webkit-font-smoothing: antialiased;bu sorunları oluşturmadan 3B hızlandırmadan yararlanmanın başka bir yoludur, ancak yalnızca Safari'de çalışır.


29

Çıkarımlar istiyorsanız, bazı senaryolarda Google Chrome performansı, donanım hızlandırması etkinken korkunçtur . İşin garibi, "numara" yı iyi -webkit-transform: rotateZ(360deg);çalıştı.

Nedenini anladığımıza inanmıyorum.


3
Safari 5 ve 6'da maksimum yükseklik kullanarak sıkıştırılmış görüntüler ve korkunç derecede yanlış animasyonlar gibi sorunlar yaşadım. GPU hızlandırmayı devre dışı bıraktığımda (translateZ (0)), her şey amaçlandığı gibi çalıştı, ancak animasyon yeterince düzgün değildi. TranslateZ (0) 'ı rotateZ (360deg) olarak değiştirdim ve aniden animasyonlar akıcı hale geldi ve donanım hızlandırıldı ve artık sorun çıkmadı.
jakub_jo

14

Tarayıcıyı, piksellerin uçmasını sağlamak için aygıtın grafik işlem birimine (GPU) erişmek için donanım hızlandırmayı kullanmaya zorlar. Öte yandan, web uygulamaları tarayıcı bağlamında çalışır, bu da yazılımın render işleminin çoğunu (hepsini olmasa da) yapmasını sağlar ve bu da geçişler için daha az beygir gücü sağlar. Ancak Web yetişiyor ve çoğu tarayıcı satıcısı artık belirli CSS kuralları aracılığıyla grafiksel donanım hızlandırması sağlıyor.

Kullanımı -webkit-transform: translate3d(0,0,0);, GPU'yu CSS geçişleri için harekete geçirerek daha yumuşak hale getirir (daha yüksek FPS).

Not: translate3d(0,0,0) Gördükleriniz açısından hiçbir şey yapmaz. Nesneyi x, y ve z eksenlerinde 0px hareket ettirir. Yalnızca donanım ivmesini zorlamak için bir tekniktir.

Burada iyi okuyun: http://www.smashingmagazine.com/2012/06/21/play-with-hardware-accelerated-css/


7

-webkit-transform: translate3d(0, 0, 0);Yeni position: -webkit-sticky;mülkü bozacak gerçeğini doğrulayabilirim . Üzerinde çalıştığım bir sol çekmece gezinme modeliyle, dönüştürme özelliğiyle istediğim donanım ivmesi, üst gezinme çubuğumun sabit konumlandırmasıyla karıştırılıyordu. Dönüşümü kapattım ve konumlandırma iyi çalıştı.

Şans eseri, -webkit-font-smoothing: antialiasedhtml elemanına sahip olduğum için zaten donanım hızlandırmaya sahiptim. Bu davranışı iOS7 ve Android'de test ediyordum.


5

Mobil cihazlarda her şeyi GPU'ya göndermek, belleğin aşırı yüklenmesine ve uygulamanın çökmesine neden olur. Bununla Cordova'daki bir iPad uygulamasında karşılaştım. En iyisi, yalnızca gerekli öğeleri, özellikle hareket ettiğiniz div'ler olan GPU'ya göndermek.

Daha da iyisi, sol yerine translateX (50px) gibi animasyonları yapmak için 3d geçiş dönüşümlerini kullanın: 50px;


1
"3B geçişleri kullanmak" yerine "3B dönüşümleri kullanın" mı demek istediniz?
Isius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.