时间:2023-05-28 16:21:02 | 来源:网站运营
时间:2023-05-28 16:21:02 来源:网站运营
前端网页字体优化指南:日常开发网页经常会使用一些特殊字体,比如思源黑体、苹方字体等,因为这些字体在一般的宿主环境中是不存在的,需要通过 css 的@font-face
定义,并从服务器中加载对应的字体文件,而字体文件一般都是比较大的,甚至有时候一个字体比其他所有的资源(js、css、图片)加起来还要大,对网页的加载性能起到非常关键的影响,因此有必要对字体进行一些优化。 本文主要从字体格式、按需提取、统一渲染三个方面来谈谈优化字体的常用技巧。cat font.ttf | ttf2woff2 > font.woff2
因为使用 了 cat 命令来提取 ttf 的内容,如果你使用的是 windows ,需要使用 git bash 或 wsl 来运行。otf2ttf MyFont.ttf
里面的 MyFont.ttf 应该是 MyFont.otf 才对,因为这个 input 应该是 OTF 类型而不是 TTF 。关于字体转换的这里再啰嗦一下:有时候美术同学还会提供 ttc 文件给我们,这不是单个字体,而是将多种字体打包在一起了,需要从中提取出 ttf 后才能使用,可以尝试使用 TTC2TTF。
0-9
这 10 个数字用到某种特殊字体,如果把整个字体文件引入就没有必要了,比切10个图片还要大。好在有一些技术能够将 0-9
这10个数字对应的字体子集提取出来。我平时会使用 font-spider 字蜘 来提取。npm install font-spider -g
然后,新建一个 html 文件,比如文件名为 index.html
,里面用一个元素包含所有的你想要提取的文字,比如 0-9,并为这个元素定义上你想要的特殊字体:<h1>0123456789</h1><style>@font-face { font-family: 'sourceHan'; src: url('./SourceHanSansCN-Regular.ttf'); font-weight: normal; font-style: normal;}h1 { font-family: 'sourceHan';}</style>
最后,在这个 html 文件所在的目录执行以下命令:font-spider index.html
这时候,原来的 SourceHanSansCN-Regular.ttf
就会被移动到 .font-spider/
目录下,而原来位置的字体会被替换成只提取了 0-9
的字体文件。这个体积相差了好几个数量级的:0-9
10 个数字的字体文件只有 7K:@font-face { font-family: myfont; src: url('./myfont.woff2') format('woff2');}body { font-family: myfont;}
假如这个 myfont.woff2 文件大小为 4M,而网络下载速度只有 1M/s ,则加载这个字体需要 4 秒钟。这4秒期间由于还没有加载完成远程字体,浏览器会使用什么字体渲染呢?事实上,不同的浏览器表现会不一样的,以下是一些常见的桌面浏览器的表现:@font-face { font-family: 'myfont'; src: url('./myfont.woff2') format('woff2');}
注意,CSS 中只需要定义字体就行,而不要使用使用这个字休。
custom.families
列表中,并在 active 回调中将该字体添加到对应的元素上,代码如下:<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script><script>WebFont.load({ custom: { families: ['myfont'], }, classes: false, active() { document.body.style.fontFamily = 'myfont'; },});</script>
这样浏览器一开始就会使用默认字体渲染内容,等字体加载完成后再使用特殊字体重新渲染。关键词:指南,字体