Webkit 改善字体加载

翻译自webkit.org

在网站里自定义网页字体以及变得越来越流行。通过使用自己站点的资源,开发者以及可以使用特殊的字体。浏览器会在字体加载完成时使用它们,但不幸的并不是所有的字体都可以瞬间下载完成,这意味着字体的下载过程中浏览器已经显示了页面。大部分字体体积都有一点大,浏览器使用它们时会有一个延迟。WebKit用两个方式改善了这个问题:改善了字体下载策略,使字体下载更快。

默认字体下载策略

浏览器尝试用最快得方式显示页面,可能尽管字体正在下载还不能使用。WebKit总是会在字体下载完成后显示它们,使用这些字体时,WebKit在下载延迟的过程中仍然显示文字元素。但老版本的WebKit会在字体下载完成前不显示这些文字。相应的,新版本的WebKit会保留最大3秒的文字隐藏时间,之后会使用本地字体显示文字,直到字体下载完成时会被新的字体替换显示。

此处有视频 请阅读原文观看

得幸于文字快速下载,这个新的策略使降级兼容(fallback)文字最小的闪现,避免了不确定得长时下载造成的模糊。最棒的地方是页面不需要做任何改进来使用这个新代理,所有的字体下载讲被设置成默认。

CSS字体加载API

不同的网页开发者可能希望使用不同的策略,来改变标题字体或者全局字体。在新的WebKit中CSS font loading API使开发者可以彻底控制字体加载策略。

这个API暴露了两个主要的JS片段:FontFace接口和FontFaceSet接口。
FontFace和CSS @font-face的规则一样,所以它包含了字体的url、weight、unicode-range、family等。而FontFaceSet包含了网页所有的字体是否可以被渲染。所有的document都有自己的FontFaceSet,可以在document.fonts中查看。

使用这些对象去实行一个特别的字体加载策略变得十分直接,一旦FontFace被构造,load()方法就开始异步下载字体数据。当下载成功或因失败而时它会返回了一个Promise。用过链式调用返回的promise,JS就可以处理它了。因此一个网站可以实行这样的策略:在不超时的情况下立即使用降级兼容字体。

<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。如果文字加载成功,新加载的字体被添加进document的FontFaceSet中并且元素的样式也被新的字体所取代。

WOFF2
不用担心哪些字体不能使用加载策略,字体加载飞快时,用户的体验将会很好。在macOS Sierra、iOS 10、GTK中WebKit已经支持一个全新的、体积更小的字体格式“WOFF 2”。新的压缩算法Brotli使这个字体体积更小,这使得WOFF 2字体可以更加快速的被下载,要比WOFF、OpenType、TrueType还快。WebKit也承认CSS@font-face中scr属性里format("woff2")的标识。因为目前不是所有的浏览器都支持WOFF 2,所以请优雅降级兼容其他的格式。

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

这个例子里,浏览器会选择它们所能支持的字体格式。因为浏览器优先加载列表中考前的字体,所以如果浏览器支持WOFF 2,它会被优先加载。

unicode-range

流量是十分珍贵的资源(尤其是在移动设备上),所以最小化或排除没用字体变得极其有价值。WebKit现在支持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规定的unicode-range中,这意味着没有下载第一个@font-face中得任何字体。有一点很重要,最后一个@font-face会被下载。因此最通用的CSS@font-face规则应该放在列表的最后。使用unicode-range去分割字体可以避免下载全部的字体,让你拯救用户的流量和电量。

阅读原文

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 一、概念 参考网页字体Serif和Sans-serif的区别及浏览器字体的设置CSS Font知识整理总结 1.F...
    合肥黑阅读 6,091评论 0 12
  • 最近兴致上来,就想更换了那Blog标题字体(汉字的);网上搜索了一番,发现蘇新詩柳繁體这款甚合我心;然后就着手搞将...
    晚晴幽草阅读 2,369评论 1 8
  • 今天和儿子去吃日式快餐,落座后,对面桌上来了一对白领一族的情侣,男人其貌不扬,但看起来还憨厚老实,女人很朴实干净,...
    读娘阅读 271评论 3 2
  • 人有抱怨的习惯,却不知道这个习惯会给自己带来许多的麻烦。夫妻相互抱怨,能永久恩爱吗?儿女对父母抱怨,父母会甘心情愿...
    唐祥玉阅读 370评论 0 0