Yazı tipi ekranı ile Yazı Tipi Performansını Denetleme

Yüklenirken bir web yazı tipinin davranışına karar vermek önemli bir performans ayarlama tekniği olabilir. @font-face için yeni font-display tanımlayıcısı, geliştiricilerin web yazı tiplerinin nasıl oluşturulacağına (veya yedek yazı tipine geçileceğine) yükleme sürelerine göre karar vermesine olanak tanır.

Günümüzde yazı tipi oluşturmadaki farklılıklar

Web yazı tipleri, geliştiricilere projelerinde zengin yazı tipleri kullanma olanağı sunar. Bunun karşılığında, kullanıcının yazı tipi yoksa tarayıcının yazı tipini indirmek için biraz zaman harcaması gerekir. Ağlar kararsız olabileceğinden bu indirme süresi, kullanıcı deneyimini olumsuz yönde etkileyebilir. Sonuçta, metninizin görüntülenmesi çok uzun sürerse kimse metninizin ne kadar güzel olduğuna dikkat etmez.

Yavaş yazı tipi indirme riskinin bir kısmını azaltmak için çoğu tarayıcı, zaman aşımı uygular ve bu sürenin sonunda yedek yazı tipi kullanılır. Bu yararlı bir tekniktir ancak maalesef tarayıcılarda gerçek uygulama farklıdır.

Tarayıcı Zaman aşımı Yedek Değiştir
Chrome 35 ve sonraki sürümler 3 saniye Evet Evet
Opera 3 saniye Evet Evet
Firefox 3 saniye Evet Evet
Internet Explorer 0 saniye Evet Evet
Safari Zaman aşımı yok Yok Yok
  • Chrome ve Firefox'ta üç saniyelik bir zaman aşımı vardır. Bu sürenin sonunda metin, yedek yazı tipiyle gösterilir. Yazı tipi indirilebilirse sonunda bir değişim gerçekleşir ve metin istenen yazı tipiyle yeniden oluşturulur.
  • Internet Explorer'da, metnin hemen oluşturulmasına neden olan sıfır saniyelik bir zaman aşımı vardır. İstenen yazı tipi henüz kullanılamıyorsa yedek bir yazı tipi kullanılır ve istenen yazı tipi kullanıma sunulduğunda metin daha sonra yeniden oluşturulur.
  • Safari'de zaman aşımı davranışı yoktur (veya en azından temel ağ zaman aşımı dışında bir şey yoktur).

Daha da kötüsü, geliştiricilerin bu kuralların uygulamalarını nasıl etkileyeceğine karar verme konusunda sınırlı kontrolleri vardır. Performans odaklı bir geliştirici, yedek yazı tipi kullanan daha hızlı bir ilk deneyim sunmayı tercih edebilir ve daha güzel web yazı tipini yalnızca indirme şansı bulduktan sonraki ziyaretlerde kullanabilir. Font Loading API gibi araçlardan yararlanarak varsayılan tarayıcı davranışlarının bazılarını geçersiz kılmanız ve performans kazançları elde etmeniz mümkün olabilir. Ancak bu, önemli miktarda JavaScript yazmanız gerektiği anlamına gelir. Bu JavaScript'in daha sonra sayfaya yerleştirilmesi veya harici bir dosyadan istenmesi gerekir. Bu da ek HTTP gecikmesine neden olur.

Bu durumu düzeltmek için CSS Çalışma Grubu, indirilebilir bir yazı tipinin tamamen yüklenmeden önce nasıl oluşturulacağını kontrol etmek üzere yeni bir @font-face tanımlayıcısı (font-display) ve ilgili bir özellik önerdi.

Yazı tipi indirme zaman çizelgeleri

font-display, bazı tarayıcıların şu anda uyguladığı mevcut yazı tipi zaman aşımı davranışlarına benzer şekilde, bir yazı tipi indirme işleminin kullanım süresini üç ana döneme ayırır.

  1. İlk nokta, yazı bloğu dönemidir. Bu süre zarfında yazı tipi yüklenmezse onu kullanmaya çalışan tüm öğeler bunun yerine görünmez yedek yazı tipiyle oluşturulmalıdır. Yazı tipi, engelleme süresi boyunca başarıyla yüklenirse normal şekilde kullanılır.
  2. Yazı tipi değiştirme dönemi, yazı tipi engelleme döneminden hemen sonra gerçekleşir. Bu süre zarfında yazı tipi yüklenmezse onu kullanmaya çalışan tüm öğeler bunun yerine yedek yazı tipi ile oluşturulmalıdır. Yazı tipi, takas süresi boyunca başarıyla yüklenirse normal şekilde kullanılır.
  3. Yazı tipi hatası dönemi, yazı tipi değiştirme döneminden hemen sonra gerçekleşir. Bu süre başladığında yazı tipi henüz yüklenmemişse yükleme başarısız olarak işaretlenir ve normal yazı tipi yedeği kullanılır. Aksi takdirde yazı tipi normal şekilde kullanılır.

Bu dönemleri anlamak, indirilip indirilmediğine veya ne zaman indirildiğine bağlı olarak yazı tipinizin nasıl oluşturulacağına karar vermek için font-display kullanabileceğiniz anlamına gelir.

Sizin için hangi font-display uygun?

font-display tanımlayıcısıyla çalışmak için @font-face at-kurallarınıza ekleyin:

@font-face {
    font-family: 'Arvo';
    font-display: auto;
    src: local('Arvo'), url(https://fonts.gstatic.com/s/arvo/v9/rC7kKhY-eUDY-ucISTIf5PesZW2xOQ-xsNqO47m55DA.woff2) format('woff2');
}

font-display şu anda aşağıdaki değer aralığını auto | block | swap | fallback | optional desteklemektedir.

otomatik

auto, kullanıcı aracısının kullandığı yazı tipi görüntüleme stratejisini kullanır. Çoğu tarayıcıda şu anda engelle'ye benzer bir varsayılan strateji vardır.

engelle

block, yazı tipine kısa bir engelleme süresi (çoğu durumda 3 saniye önerilir) ve sonsuz bir takas süresi verir. Diğer bir deyişle, yazı tipi yüklenmemişse tarayıcı ilk başta "görünmez" metin çizer ancak yazı tipi yüklendikten hemen sonra yazı tipi yüzünü değiştirir. Tarayıcı bunu yapmak için, seçilen yazı tipine benzer metriklere sahip ancak tüm karakterleri "mürekkep" içermeyen anonim bir yazı tipi yüzü oluşturur. Bu değer yalnızca sayfanın kullanılabilir olması için metnin belirli bir yazı tipinde oluşturulması gerekiyorsa kullanılmalıdır.

takas

swap, yazı tipine sıfır saniyelik bir engelleme süresi ve sonsuz bir takas süresi verir. Bu, yazı tipi yüklenmemişse tarayıcının metni hemen yedek bir yazı tipiyle çizdiği, ancak yazı tipi yüklendikten sonra yazı tipini değiştirdiği anlamına gelir. Engelle'ye benzer şekilde, bu değer yalnızca metnin belirli bir yazı tipinde oluşturulmasının sayfa için önemli olduğu durumlarda kullanılmalıdır. Ancak metin herhangi bir yazı tipinde oluşturulsa bile doğru mesaj iletilir. Logo metni, değişim için iyi bir adaydır. Şirketin adını makul bir yedek kullanarak görüntülemek mesajı iletir ancak sonunda resmi yazı tipini kullanırsınız.

fallback

yedek, yazı tipine son derece küçük bir engelleme süresi (çoğu durumda 100 ms veya daha az önerilir) ve kısa bir takas süresi (çoğu durumda üç saniye önerilir) verir. Diğer bir deyişle, yazı tipi yüklü değilse önce yedek yazı tipi ile oluşturulur ancak yazı tipi yüklendikten sonra değiştirilir. Ancak çok fazla zaman geçerse yedek, sayfanın kullanım süresinin geri kalanında kullanılır. Yedek, kullanıcının en kısa sürede okumaya başlamasını istediğiniz ve yeni bir yazı tipi yüklenirken metni kaydırarak deneyimini bölmek istemediğiniz gövde metni gibi öğeler için iyi bir seçenektir.

isteğe bağlı

isteğe bağlı, yazı tipine son derece küçük bir blok dönemi (çoğu durumda 100 ms veya daha az önerilir) ve sıfır saniyelik bir takas dönemi verir. Yedek'e benzer şekilde, indirilen yazı tipi "kullanılması iyi bir şey" olsa da deneyim için kritik değilse bu seçenek iyi bir seçimdir. İsteğe bağlı değer, yazı tipi indirme işlemini başlatıp başlatmama kararını tarayıcıya bırakır. Tarayıcı, kullanıcı için en iyisinin ne olduğuna bağlı olarak bu işlemi başlatmayı seçebilir veya düşük öncelikli olarak yapabilir. Bu, kullanıcının zayıf bir bağlantı kullandığı ve bir yazı tipini indirmenin kaynakları en iyi şekilde kullanmayabileceği durumlarda yararlı olabilir.

Tarayıcı desteği

font-display şu anda masaüstü Chrome 49'daki Deneysel Web Platformu Özellikleri işaretinin arkasındadır ve Opera ile Android için Opera'da kullanıma sunulmuştur.

Demo

font-display'yi denemek için örneğe göz atın. Performans odaklı geliştiriciler için araç çantanızdaki yararlı araçlardan biri olabilir.