bu content-visibility
özelliği, sayfa yükleme performansını iyileştirmek için en etkili yeni CSS özelliklerinden biri olabilir. content-visibility
kullanıcı aracısının, düzen ve boyama da dahil olmak üzere bir öğenin oluşturma işini ihtiyaç duyulana kadar atlamasını sağlar. Oluşturma atlandığından, içeriğinizin büyük bir bölümü ekran dışındaysa, content-visibility
özelliği, ilk kullanıcının çok daha hızlı yüklenmesini sağlar. Ayrıca, ekrandaki içerikle daha hızlı etkileşime olanak tanır. Oldukça temiz.
content-visibility: auto
parçalanmış içerik alanlarına bir 7x ilk yükte işleme performansı artışı. Daha fazlasını öğrenmek için okumaya devam edin.tarayıcı desteği #
- Chrome 85, Desteklenir 85
- Firefox önizlemesi, Önizleme
- Kenar 85, Desteklenen 85
- Safari, desteklenmiyor
content-visibility
içindeki ilkellere dayanır CSS Kapsama Spesifikasyonu. Sırasında content-visibility
şimdilik yalnızca Chromium 85’te desteklenmektedir (ve “prototiplemeye değer” Firefox için), Kapsama Spesifikasyonu şurada desteklenir: en modern tarayıcılar.
CSS Muhafazası #
CSS kapsamının temel ve kapsayıcı hedefi, sağlayarak web içeriğinin performans iyileştirmelerini sağlamaktır. bir DOM alt ağacının öngörülebilir izolasyonu sayfanın geri kalanından.
Temel olarak bir geliştirici, bir tarayıcıya sayfanın hangi bölümlerinin bir içerik kümesi olarak kapsüllendiğini söyleyebilir ve tarayıcıların alt ağacın dışındaki durumu dikkate almasına gerek kalmadan içerik hakkında akıl yürütmesine olanak tanır. Hangi içerik bitlerinin (alt ağaçların) yalıtılmış içerik içerdiğini bilmek, tarayıcının sayfa işleme için optimizasyon kararları verebileceği anlamına gelir.
Her biri için potansiyel bir değer olan dört tür CSS içeriği vardır. contain
Boşlukla ayrılmış bir değerler listesinde birleştirilebilen CSS özelliği:
size
: Bir öğedeki boyut sınırlaması, öğenin kutusunun alt öğelerini incelemeye gerek kalmadan düzenlenebilmesini sağlar. Bu, tek ihtiyacımız olan öğenin boyutuysa, alt öğelerin düzenini potansiyel olarak atlayabileceğimiz anlamına gelir.layout
: Düzen kapsamı, alt öğelerin sayfadaki diğer kutuların dış düzenini etkilemediği anlamına gelir. Bu, tek yapmak istediğimiz diğer kutuları yerleştirmekse, potansiyel olarak alt öğelerin düzenini atlamamıza izin verir.style
: Stil sınırlaması, alt öğelerinden daha fazlasını etkileyebilecek özelliklerin öğeden (örneğin sayaçlar) kaçmamasını sağlar. Bu, tek istediğimiz diğer öğelerdeki stilleri hesaplamaksa, potansiyel olarak torunlar için stil hesaplamasını atlamamıza izin verir.paint
: Boya kapsamı, içeren kutunun alt öğelerinin sınırları dışında görüntülenmemesini sağlar. Hiçbir şey öğeyi görünür şekilde taşamaz ve bir öğe ekran dışındaysa veya başka bir şekilde görünmüyorsa, onun alt öğeleri de görünmez. Bu, öğe ekran dışındaysa torunları boyamayı potansiyel olarak atlamamıza izin verir.
ile işleme işini atlamak content-visibility
#
Tarayıcı optimizasyonları yalnızca uygun bir küme belirtildiğinde devreye girebileceğinden, hangi kapsama değerlerinin kullanılacağını anlamak zor olabilir. En iyi neyin işe yaradığını görmek için değerlerle oynayabilir veya adı verilen başka bir CSS özelliğini kullanabilirsiniz. content-visibility
gerekli sınırlamayı otomatik olarak uygulamak için. content-visibility
bir geliştirici olarak minimum çabayla tarayıcının sağlayabileceği en büyük performans kazanımlarını elde etmenizi sağlar.
content-visibility özelliği birkaç değer kabul eder, ancak auto
anında performans iyileştirmeleri sağlayandır. olan bir eleman content-visibility: auto
kazançlar layout
, style
Ve paint
çevreleme. Öğe ekran dışındaysa (ve başka bir şekilde kullanıcıyla ilgili değilse – ilgili öğeler, alt ağacında odak veya seçime sahip olanlar olacaktır), ayrıca kazanır size
çevreleme (ve durur tablo Ve isabet testi onun içerikleri).
Bu ne anlama gelir? Kısacası, öğe ekran dışındaysa, alt öğeleri oluşturulmaz. Tarayıcı, içeriğini dikkate almadan öğenin boyutunu belirler ve orada durur. Öğenin alt ağacının stili ve düzeni gibi oluşturma işlemlerinin çoğu atlanır.
Öğe görünüme yaklaştıkça, tarayıcı artık öğeyi eklemez. size
çevreleme ve öğenin içeriğini boyamaya ve isabet testine başlar. Bu, oluşturma işinin kullanıcı tarafından görülebilmesi için tam zamanında yapılmasını sağlar.
Erişilebilirlik hakkında bir not #
özelliklerinden biri content-visibility: auto
ekran dışı içeriğin, belge nesne modelinde ve dolayısıyla erişilebilirlik ağacında kullanılabilir durumda kalmasıdır (aksine visibility: hidden
). Bu, içeriğin yüklenmesini beklemeden veya oluşturma performansından ödün vermeden sayfada aranabileceği ve sayfaya gidilebileceği anlamına gelir.
Ancak bunun ters tarafı şu ki, dönüm noktası gibi stil özelliklerine sahip öğeler display: none
veya visibility: hidden
tarayıcı bu stilleri görünüme girene kadar işlemeyeceğinden, ekran dışındayken erişilebilirlik ağacında da görünür. Bunların erişilebilirlik ağacında görünür olmasını ve potansiyel olarak karışıklığa neden olmasını önlemek için, şunları da eklediğinizden emin olun: aria-hidden="true"
.
Örnek: bir seyahat blogu #
content-visibility: auto
soldaki parçalanmış alanlara. Sonuçlar, oluşturma sürelerini gösterir. 232ms ile 30ms ilk sayfa yüklemesinde.Bir seyahat blogu tipik olarak birkaç resim ve biraz açıklayıcı metin içeren bir dizi hikaye içerir. Tipik bir tarayıcı bir seyahat bloguna gittiğinde şunlar olur:
- Sayfanın bir kısmı, gerekli kaynaklarla birlikte ağdan indirilir.
- Tarayıcı, içeriğin kullanıcı tarafından görülüp görülmediğini dikkate almadan sayfanın tüm içeriğini şekillendirir ve düzenler.
- Tüm sayfa ve kaynaklar indirilene kadar tarayıcı 1. adıma geri döner.
2. adımda, tarayıcı değişmiş olabilecek şeyleri aramak için tüm içeriği işler. Yeni güncellemeler sonucunda değişmiş olabilecek öğelerle birlikte, yeni öğelerin stilini ve düzenini günceller. Bu render çalışması. Bu zaman alır.
Şimdi koyarsanız ne olacağını düşünün content-visibility: auto
blogdaki her bir hikayede. Genel döngü aynıdır: tarayıcı sayfanın parçalarını indirir ve işler. Ancak fark, 2. adımda yaptığı iş miktarındadır.
İçerik görünürlüğü ile, o anda kullanıcı tarafından görülebilen (ekranda bulunan) tüm içerikleri biçimlendirecek ve düzenleyecektir. Bununla birlikte, tamamen ekran dışında olan hikayeyi işlerken, tarayıcı oluşturma işini atlayacak ve yalnızca öğe kutusunun kendisinin stilini ve düzenini oluşturacaktır.
Bu sayfayı yükleme performansı, sanki ekrandaki hikayelerin tamamı ve ekran dışındaki hikayelerin her biri için boş kutular içeriyormuş gibi olacaktır. Bu, çok daha iyi performans gösterir. %50 veya daha fazla beklenen azalma yükleme oluşturma maliyetinden. Örneğimizde, bir 232ms zamanı işlemek 30ms render süresi. O bir 7x performans artışı.
Bu avantajlardan yararlanmak için yapmanız gereken iş nedir? İlk olarak, içeriği bölümlere ayırıyoruz:
story
uygulanan sınıf, almak için content-visibility: auto
. Görmek Codepen’de DemoArdından, bölümlere aşağıdaki stil kuralını uygularız:
.story {
content-visibility: auto;
contain-intrinsic-size: 1000px; /* Explained in the next section. */
}
ile bir elemanın doğal boyutunu belirtme contain-intrinsic-size
#
Olası faydaların farkına varmak için content-visibility
, içeriğin oluşturma sonuçlarının öğenin boyutunu hiçbir şekilde etkilememesini sağlamak için tarayıcının boyut sınırlaması uygulaması gerekir. Bu, öğenin boşmuş gibi yerleştirileceği anlamına gelir. Elemanın normal bir blok düzeninde belirtilen bir yüksekliği yoksa, o zaman 0 yükseklikte olacaktır.
Kaydırma çubuğunun boyutu değişeceğinden, her katın sıfır olmayan bir yüksekliğe sahip olmasına bağlı olarak bu ideal olmayabilir.
Neyse ki, CSS başka bir özellik sağlar, contain-intrinsic-size
öğenin doğal boyutunu etkili bir şekilde belirten eleman boyut sınırlamasından etkileniyorsa. Örneğimizde, bunu şu şekilde ayarlıyoruz: 1000px
bölümlerin yüksekliği ve genişliği için bir tahmin olarak.
Bu, boyutlandırılmamış div’lerinizin hala yer kaplamasını sağlayarak, “gerçek boyutlu” boyutlarda tek bir çocuğu varmış gibi düzenleneceği anlamına gelir. contain-intrinsic-size
işlenen içerik yerine yer tutucu boyutu görevi görür.
Chromium 98 ve sonrasında yeni bir auto
için anahtar kelime contain-intrinsic-size
. Belirtildiğinde tarayıcı, varsa son oluşturulan boyutu hatırlar ve geliştirici tarafından sağlanan yer tutucu boyutu yerine bunu kullanır. Örneğin, contain-intrinsic-size: auto 300px
öğe bir ile başlayacak 300px
her boyutta içsel boyutlandırma, ancak öğenin içeriği işlendikten sonra, işlenen gerçek boyutu koruyacaktır. Sonraki işleme boyutu değişiklikleri de hatırlanacaktır. Uygulamada bunun anlamı, bir öğeyi kaydırırsanız content-visibility: auto
uygulandığında ve ardından ekran dışına kaydırıldığında, ideal genişlik ve yüksekliğini otomatik olarak koruyacak ve yer tutucu boyutlandırmaya geri dönmeyecek. Bu özellik, kullanıcı sayfayı keşfettikçe boyutlandırma tahminini zaman içinde otomatik olarak iyileştirebilen sonsuz kaydırıcılar için özellikle kullanışlıdır.
İle içeriği gizleme content-visibility: hidden
#
Önbelleğe alınmış işleme durumunun avantajlarından yararlanırken, ekranda olup olmadığına bakılmaksızın içeriği işlenmeden tutmak isterseniz ne olur? Girmek: content-visibility: hidden
.
bu content-visibility: hidden
özelliği size işlenmemiş içeriğin ve önbelleğe alınmış işleme durumunun aynı avantajlarını sunar. content-visibility: auto
ekran dışı yapar. Ancak, farklı olarak auto
ekranda görüntülenmeye otomatik olarak başlamaz.
Bu size daha fazla kontrol sağlayarak bir öğenin içeriğini gizlemenizi ve daha sonra bunları hızlı bir şekilde göstermenizi sağlar.
Öğenin içeriğini gizlemenin diğer yaygın yollarıyla karşılaştırın:
display: none
: öğeyi gizler ve oluşturma durumunu yok eder. Bu, öğeyi göstermenin, aynı içeriğe sahip yeni bir öğe oluşturmak kadar pahalı olduğu anlamına gelir.visibility: hidden
: öğeyi gizler ve oluşturma durumunu korur. Öğe (ve alt ağacı) sayfada hala geometrik yer kapladığından ve yine de tıklanabildiğinden, bu, öğeyi gerçekten belgeden kaldırmaz. Ayrıca, gizliyken bile ihtiyaç duyulduğunda işleme durumunu günceller.
content-visibility: hidden
Öte yandan, oluşturma durumunu korurken öğeyi gizler, bu nedenle, olması gereken herhangi bir değişiklik varsa, bunlar yalnızca öğe tekrar gösterildiğinde gerçekleşir (örn. content-visibility: hidden
özellik kaldırılır).
için bazı harika kullanım örnekleri content-visibility: hidden
gelişmiş sanal kaydırıcıları uygularken ve düzeni ölçerken. Ayrıca tek sayfalık uygulamalar (SPA’lar) için harikadırlar. Etkin olmayan uygulama görünümleri DOM’da şu şekilde bırakılabilir: content-visibility: hidden
görüntülenmelerini engellemek ancak önbelleğe alınmış durumlarını korumak için uygulanır. Bu, görünümün tekrar etkin hale geldiğinde hızlı bir şekilde işlenmesini sağlar.
Sonraki Boya Etkileşimi Üzerindeki Etkiler (INP) #
INP, bir sayfanın kullanıcı girişlerine güvenilir bir şekilde yanıt verme yeteneğini değerlendiren bir ölçümdür. Duyarlılık, işleme işi de dahil olmak üzere ana iş parçacığında meydana gelen aşırı miktardaki çalışmadan etkilenebilir.
Herhangi bir sayfada işleme işini ne zaman azaltabilirsiniz, ana ileti dizisine kullanıcı girişlerine daha hızlı yanıt verme fırsatı vermiş olursunuz. Bu, işi işlemeyi ve content-visiblity
CSS özelliği, uygun olduğunda, özellikle başlatma sırasında, çoğu oluşturma ve düzen işi yapıldığında, oluşturma işini azaltabilir.
İşleme işini azaltmanın INP üzerinde doğrudan etkisi vardır. Kullanıcılar, kullanan bir sayfayla etkileşime girmeye çalıştıklarında content-visibility
özelliği, ekran dışı öğelerin düzenini ve işlenmesini uygun şekilde ertelerseniz, ana iş parçacığına, kullanıcı tarafından görülebilen kritik çalışmalara yanıt verme şansı vermiş olursunuz. Bu, bazı durumlarda sayfanızın INP’sini iyileştirebilir.
Çözüm #
content-visibility
ve CSS Containment Spec, bazı heyecan verici performans artışlarının doğrudan CSS dosyanıza geleceği anlamına gelir. Bu mülkler hakkında daha fazla bilgi için şuraya göz atın: