Özet
Chrome 53'ten itibaren, dönüşüm ölçeği değiştiğinde (will-change: transform
CSS özelliğine sahip değilse) tüm içerikler yeniden sınıflandırılır. Diğer bir deyişle will-change: transform
, "lütfen animasyon işlemini hızlıca yapın" anlamına gelir.
Bu, yalnızca komut dosyası değiştirme yoluyla gerçekleşen ölçekler için geçerlidir ve CSS animasyonları veya Web Animasyonları için geçerli değildir.
Bu, sitenizin muhtemelen daha iyi görünen içeriğe sahip olacağı ancak aşağıda özetlenen bazı basit değişiklikler olmadan yavaş olabileceği anlamına gelir.
Web geliştiricileri için sonuçlar
Bu değişiklik kapsamında will-change: transform
, içeriği sabit bir bit eşlem haline getirmeye zorlamak gibi düşünülebilir. Bu bit eşlem, dönüşüm güncellemelerinde daha sonra hiçbir zaman değişmez. Bu, geliştiricilerin bit eşlem üzerindeki animasyonların hareket ettirme, döndürme veya ölçeklendirme gibi dönüşüm hızını artırmasına olanak tanır.
Ölçek ve çevirme dönüşümleri arasında ayrım yapmayız.
Önerilen işlemler
Çok hızlı (diğer bir deyişle 60 fps) dönüştürme animasyon hızlarına ihtiyacınız olduğunda will-change: transform
öğelerini yerleştirin ve öğenin her karede yüksek kalitede piksellenmesinin yeterince hızlı olmaması beklenir. Aksi takdirde will-change: transform
kullanmaktan kaçının.
Performans kalitesi dengesini optimize etmek için, animasyonlar başladığında will-change:
transform
öğesini eklemek ve sona erdiğinde kaldırmak isteyebilirsiniz. Bununla birlikte, will-change: transform
eklemenin veya kaldırmanın genellikle tek seferlik yüksek bir performans maliyeti olduğunu unutmayın.
Uygulamada dikkat edilmesi gereken diğer hususlar
will-change: transform
kaldırıldığında içerik yalnızca sonraki animasyon karesinde (requestAnimationFrame)
üzerinden. Bu nedenle, üzerinde will-change: transform
bulunan bir katmanınız varsa ve sadece bir yeniden tarama işlemini tetikleyip ardından animasyon oluşturmaya devam etmek istiyorsanız will-change: transform'i kaldırmanız ve daha sonra bunu bir requestAnimationFrame() c
allback'te yeniden eklemeniz gerekir.
Animasyon sırasında herhangi bir zamanda geçerli ölçekte kafes oluşturmak isterseniz bir karede kaldırmak için yukarıdaki tekniği uygulayın, sonraki kareye will-change:
transform
tekrar ekleyin.
Bu durum, içeriğin birleştirilmiş katmanını kaybetmesi gibi yan etkiye neden olarak yukarıdaki önerinin biraz pahalı olmasına neden olabilir. Bu bir sorun oluşturuyorsa bu işlem sırasında birleştirilmiş bir katmanda kaldığından emin olmak için içeriğe transform: translateZ(0)
öğesini de eklemenizi öneririz.
Etkinin özeti
Bu değişiklik, oluşturulan içeriğin kalitesi, performansı ve geliştirici kontrolü üzerinde etkili olacak.
- Oluşturulan içerik kalitesi: Dönüşüm ölçeğini canlandıran öğelerin oluşturulan çıktısı, varsayılan olarak her zaman net olur.
- Performans:
will-change: transform
varken dönüşüm animasyonu hızlı gerçekleştirilir. - Geliştirici kontrolü: Geliştiriciler, ekleme ve kaldırma yoluyla öğe ve animasyon karesi bazında kalite ve hız arasında seçim yapabilirler
will-change: transform
.
Çok daha fazla ayrıntı için yukarıdaki başvurulan tasarım belgesine bakın.
Örnekler
Bu örnekte, remainsBlurry
kimliğine sahip öğe bu değişiklikten sonra bulanık kalacak ama noLongerBlurry
kimliğine sahip öğe net bir hale gelecek. Bunun nedeni, ilk öğenin üzerinde bir will-
change: transform
CSS mülkünün olmasıdır.
Gerçek uygulamalardan dönüşüm ölçeği animasyon örnekleri
- Bu hatadan: Yakınlaştırma kaplan
- Mobil cihazlarda Google Haritalar (maps.google.com) - haritayı yakınlaştırın
- Masaüstünde Google Haritalar Hafif Sürüm
- Ticketmaster koltuk haritası