Webkit 改善字體加載

翻譯自webkit.org

在網(wǎng)站里自定義網(wǎng)頁字體以及變得越來越流行。通過使用自己站點的資源疮鲫,開發(fā)者以及可以使用特殊的字體吆你。瀏覽器會在字體加載完成時使用它們,但不幸的并不是所有的字體都可以瞬間下載完成俊犯,這意味著字體的下載過程中瀏覽器已經(jīng)顯示了頁面妇多。大部分字體體積都有一點大,瀏覽器使用它們時會有一個延遲燕侠。WebKit用兩個方式改善了這個問題:改善了字體下載策略者祖,使字體下載更快。

默認(rèn)字體下載策略

瀏覽器嘗試用最快得方式顯示頁面绢彤,可能盡管字體正在下載還不能使用七问。WebKit總是會在字體下載完成后顯示它們,使用這些字體時茫舶,WebKit在下載延遲的過程中仍然顯示文字元素械巡。但老版本的WebKit會在字體下載完成前不顯示這些文字。相應(yīng)的,新版本的WebKit會保留最大3秒的文字隱藏時間讥耗,之后會使用本地字體顯示文字有勾,直到字體下載完成時會被新的字體替換顯示。

此處有視頻 請閱讀原文觀看

得幸于文字快速下載古程,這個新的策略使降級兼容(fallback)文字最小的閃現(xiàn)蔼卡,避免了不確定得長時下載造成的模糊。最棒的地方是頁面不需要做任何改進(jìn)來使用這個新代理挣磨,所有的字體下載講被設(shè)置成默認(rèn)雇逞。

CSS字體加載API

不同的網(wǎng)頁開發(fā)者可能希望使用不同的策略,來改變標(biāo)題字體或者全局字體趋急。在新的WebKit中CSS font loading API使開發(fā)者可以徹底控制字體加載策略喝峦。

這個API暴露了兩個主要的JS片段:FontFace接口和FontFaceSet接口。
FontFace和CSS @font-face的規(guī)則一樣呜达,所以它包含了字體的url谣蠢、weight、unicode-range查近、family等眉踱。而FontFaceSet包含了網(wǎng)頁所有的字體是否可以被渲染。所有的document都有自己的FontFaceSet霜威,可以在document.fonts中查看谈喳。

使用這些對象去實行一個特別的字體加載策略變得十分直接,一旦FontFace被構(gòu)造戈泼,load()方法就開始異步下載字體數(shù)據(jù)婿禽。當(dāng)下載成功或因失敗而時它會返回了一個Promise。用過鏈?zhǔn)秸{(diào)用返回的promise大猛,JS就可以處理它了扭倾。因此一個網(wǎng)站可以實行這樣的策略:在不超時的情況下立即使用降級兼容字體。

<div id="target" style="font-family: MyFallbackFont;">hamburgefonstiv</div>
let fontFace = new FontFace("MyWebFont", "url('MyWebFont.woff2') format('woff2'),
    url('MyWebFont.woff') format('woff')");
fontFace.load().then(function(loadedFontFace) {
    document.fonts.add(loadedFontFace);
    document.getElementById("target").style.fontFamily = "MyWebFont";
});

在這個例子里挽绩,元素樣式聲明使用了MyFallbackFont膛壹,然后JS運行并開始請求MyWebFont。如果文字加載成功唉堪,新加載的字體被添加進(jìn)document的FontFaceSet中并且元素的樣式也被新的字體所取代模聋。

WOFF2
不用擔(dān)心哪些字體不能使用加載策略,字體加載飛快時唠亚,用戶的體驗將會很好链方。在macOS Sierra、iOS 10灶搜、GTK中WebKit已經(jīng)支持一個全新的侄柔、體積更小的字體格式“WOFF 2”共啃。新的壓縮算法Brotli使這個字體體積更小,這使得WOFF 2字體可以更加快速的被下載暂题,要比WOFF、OpenType究珊、TrueType還快薪者。WebKit也承認(rèn)CSS@font-face中scr屬性里format("woff2")的標(biāo)識。因為目前不是所有的瀏覽器都支持WOFF 2剿涮,所以請優(yōu)雅降級兼容其他的格式言津。

@font-face {
    font-family: MyWebFont;
    src: url("MyWebFont.woff2") format("woff2"),
         url("MyWebFont.woff") format("woff");
}

這個例子里,瀏覽器會選擇它們所能支持的字體格式取试。因為瀏覽器優(yōu)先加載列表中考前的字體悬槽,所以如果瀏覽器支持WOFF 2,它會被優(yōu)先加載瞬浓。

unicode-range

流量是十分珍貴的資源(尤其是在移動設(shè)備上)初婆,所以最小化或排除沒用字體變得極其有價值。WebKit現(xiàn)在支持unicode-rangeCSS屬性猿棉。

@font-face {
    font-family: MyWebFont;
    src: url("MyWebFont-extended.woff2") format("woff2"),
         url("MyWebFont-extended.woff") format("woff");
    unicode-range: U+110-24F;
}

@font-face {
    font-family: MyWebFont;
    src: url("MyWebFont.woff2") format("woff2"),
         url("MyWebFont.woff") format("woff");
    unicode-range: U+0-FF;
}
<div style="font-family: MyWebFont;">hamburgefonstiv</div>

在這個例子里磅叛,沒有一個字符屬于MyWebFont中第一個CSS@font-face規(guī)定的unicode-range中,這意味著沒有下載第一個@font-face中得任何字體萨赁。有一點很重要弊琴,最后一個@font-face會被下載。因此最通用的CSS@font-face規(guī)則應(yīng)該放在列表的最后杖爽。使用unicode-range去分割字體可以避免下載全部的字體敲董,讓你拯救用戶的流量和電量。

閱讀原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慰安,一起剝皮案震驚了整個濱河市腋寨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泻帮,老刑警劉巖精置,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锣杂,居然都是意外死亡脂倦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門元莫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖阻,“玉大人,你說我怎么就攤上這事踱蠢』鹋罚” “怎么了棋电?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苇侵。 經(jīng)常有香客問我赶盔,道長,這世上最難降的妖魔是什么榆浓? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任于未,我火速辦了婚禮,結(jié)果婚禮上陡鹃,老公的妹妹穿的比我還像新娘烘浦。我一直安慰自己,他們只是感情好萍鲸,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布闷叉。 她就那樣靜靜地躺著,像睡著了一般脊阴。 火紅的嫁衣襯著肌膚如雪握侧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天蹬叭,我揣著相機與錄音藕咏,去河邊找鬼。 笑死秽五,一個胖子當(dāng)著我的面吹牛孽查,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坦喘,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼盲再,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓣铣?” 一聲冷哼從身側(cè)響起答朋,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棠笑,沒想到半個月后梦碗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蓖救,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年洪规,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片循捺。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩例,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出从橘,到底是詐尸還是另有隱情念赶,我是刑警寧澤础钠,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站叉谜,受9級特大地震影響旗吁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜停局,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一阵漏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翻具,春花似錦、人聲如沸回还。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柠硕。三九已至工禾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝗柔,已是汗流浹背闻葵。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留癣丧,地道東北人槽畔。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像胁编,于是被迫代替她去往敵國和親厢钧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案嬉橙? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,737評論 1 92
  • 一早直、概念 參考網(wǎng)頁字體Serif和Sans-serif的區(qū)別及瀏覽器字體的設(shè)置CSS Font知識整理總結(jié) 1.F...
    合肥黑閱讀 6,086評論 0 12
  • 最近興致上來,就想更換了那Blog標(biāo)題字體(漢字的)市框;網(wǎng)上搜索了一番霞扬,發(fā)現(xiàn)蘇新詩柳繁體這款甚合我心;然后就著手搞將...
    晚晴幽草閱讀 2,367評論 1 8
  • 今天和兒子去吃日式快餐枫振,落座后喻圃,對面桌上來了一對白領(lǐng)一族的情侶,男人其貌不揚蒋得,但看起來還憨厚老實级及,女人很樸實干凈,...
    讀娘閱讀 271評論 3 2
  • 人有抱怨的習(xí)慣额衙,卻不知道這個習(xí)慣會給自己帶來許多的麻煩饮焦。夫妻相互抱怨怕吴,能永久恩愛嗎?兒女對父母抱怨县踢,父母會甘心情愿...
    唐祥玉閱讀 370評論 0 0