网页字体优化实战:TTF转WOFF2实现高效压缩与性能提升
2026/9/24 22:19:23 网站建设 项目流程

1. 为什么我建议你赶紧把TTF换成WOFF2

先别急着下载工具,我先把话说清楚。你手里的TTF字体,放到Web页面上用,十有八九是要吃亏的。这不是说TTF本身不好,而是它生错了时代——TTF诞生的时候,压根没有“网页加载性能”这个概念,它走的是本地桌面应用的路线,怎么厚实怎么来。而WOFF2是专门为Web而生的格式,核心思路就一条:尽量让字体文件在保持视觉质量的前提下,变得足够小、足够轻。

我见过太多人做网站优化,图片压缩了、JS合并了、CSS精简了,唯独字体文件躺在服务器上纹丝不动,一个中文字体包动辄十几兆,还沾沾自喜觉得页面“已经优化过了”。说实话,这是典型的顾此失彼。以市面上常见的中文字体为例,一套包含简体常用字的TTF字体,体积通常在5MB到15MB之间,而转换成WOFF2之后,往往能压到2MB到4MB——如果是纯数字或拉丁字符集,压缩率更是夸张,经常能压到原来的三分之一甚至四分之一。

这个体积差异直接影响什么?直接影响你的首屏加载时间,尤其对移动端用户来说,字体文件在弱网环境下就是一场灾难。我实测过一次,某网站在3G网络下,光等一个8MB的TTF字体加载完,用户就得干瞪眼好几秒。而换成WOFF2之后,同样的页面,字体加载时间直接砍半。这就是为什么现在主流的Google Fonts、各大前端性能优化工具、CDN服务商,清一色优先推荐WOFF2。

再说说使用门槛的问题。TTF在Windows、macOS、Linux桌面上兼容性确实好,但放到浏览器里,情况就变了。现代浏览器对WOFF2的支持已经全面普及,包括Chrome、Firefox、Safari、Edge等主流浏览器的近些年版本,覆盖率极高。而WOFF2本身就是由谷歌主导、联合Mozilla等厂商一起推动的标准,当初设计的目标就是压缩率和解析效率兼得。所以无论从哪个角度看,Web环境下WOFF2都是更优解。

那到底怎么把TTF高效、批量地转成WOFF2?这篇博文我打算把自己在项目里反复用的方案、工具、坑全部分享出来。不管你是前端工程师、独立开发者、还是给客户做网站的外包人员,这套流程记下来,以后遇到字体优化就是十分钟的事。

2. ttf2woff2的基本逻辑与格式背后的原理

2.1 字体格式的“大小之争”从何而来

要理解为什么WOFF2能把字体压得这么小,得先弄清楚TTF到底属于什么类型的文件格式。

TTF(TrueType Font)是一种轮廓字体格式,它用数学曲线(贝塞尔曲线)来描述每个字符的轮廓,而不是用像素点阵。好处是放大缩小不变形,坏处是——记录这些数学曲线的数据本身就很大,尤其对于中文字体,一个字可能有几百上千个控制点,一整套字体下来数据量非常可观。

而且TTF内部结构在设计时没有考虑过“网络传输”这个场景。它内部的数据组织方式偏向于让操作系统本地调用时快速解析,存储效率并不是优先目标。打个比方,TTF像是搬家时把所有东西原封不动装进一个大箱子,虽然有整理但没怎么压缩;而WOFF2相当于用了真空压缩袋,把体积狠狠压了一轮。

WOFF2在压缩技术上做了三件事:第一,使用Brotli算法做通用压缩,这是比gzip和zlib压缩率更高的算法,压字体文件很有一套;第二,它对字体内部的表结构做了重组和变换,把重复出现的数据合并、去重,这是WOFF版本没有做过的深度优化;第三,它在解码效率上也做了权衡,压缩率高但解压速度并没有因此变得特别慢,不会给浏览器解析带来明显负担。

还有一个容易被人忽略的点:WOFF2本身就是自带元数据权限说明的。字体作者可以通过meta信息声明授权方式,这对商业字体来说很关键。普通用户可能不在乎,但如果你在给企业做网站,用了商业字体的转换版本,这个信息就属于必须保留的内容,直接关系到版权合规问题。

2.2 ttf2woff2这个工具的原理与定位

ttf2woff2这个工具,本质上做的事情就是:读取TTF(或者OTF)里的字体轮廓数据和各项表信息,然后按照WOFF2规范重新打包。

你可能想问,直接改个后缀名不就行了?千万使不得。文件格式不是靠后缀名区分的,内部数据结构完全不同。如果你把.ttf直接改成.woff2丢到服务器上,浏览器会直接报错,提示字体文件无效。TTF和WOFF2的容器结构差距非常大,必须要经过专门的转换工具处理,让字体文件以WOFF2规定的容器格式重新编码、重新压缩。

ttf2woff2底层用的是Google维护的woff2库,这个库是当前处理WOFF2事实上的标准实现。它支持处理TrueType轮廓的TTF文件,也支持带CFF轮廓的OTF文件。简单理解:只要你的字体文件能被正确解析出轮廓数据和字形信息,它就能重新封装成WOFF2格式。

这里要顺带纠正一个常见误区。很多人以为字体转换就是把文件格式换一下,像图片从PNG转JPG一样简单。实际上字体格式转换牵扯到格式标志、数据校验、元数据保留、字形索引映射等多个层面的东西。转换工具如果不成熟,轻则字体文件体积没降下来,重则导致部分汉字渲染异常、乱码、缺字。所以我推荐工具只有一个标准:直接用官方或社区公认度最高的方案,别拿小众脚本瞎折腾。

2.3 什么时候该转、什么时候不该转

也不是所有TTF都必须在网页里转成WOFF2。我自己用的判断标准有四个:

第一,字体文件超过200KB,就值得转。小于这个体积的字体,转了收益不大,转换本身虽然无损,但多一次处理和维护成本。

第二,字体在网页上以支持WOFF2的现代浏览器为主要目标时,优先转。如果你的用户里有大量用旧版浏览器的人,那还是得保留WOFF甚至TTF的后备方案,但如今这种情况越来越少。

第三,中文全量字体包必转。中文字体是所有字体里体积最大的类别,刚才说了有5MB到15MB的量级,这种不转WOFF2简直对不起服务器带宽。

第四,字体子集化后仍未达到理想体积时,继续配合转换。所谓子集化,就是只保留特定字符集(比如只保留数字和拉丁字母,或者只保留你在页面里实际用到的几百个汉字),去掉用不到的字形,这一步之后再用WOFF2压缩,效果往往是断崖式下降。一个10MB的中文TTF,先子集化到常用3000字,往往还剩3-4MB,再转WOFF2,可能只剩1MB左右。

反过来说,如果你只是做Word文档、PPT、海报设计之类的本地用途,或者做桌面端电子书,那保持TTF完全没毛病,甚至更好。字体转换目标场景是网络传输,不是本地渲染,别把两个场景搞混了。

3. ttf2woff2的获取、安装与快速上手

3.1 三种获取方式,按需选择

ttf2woff2本身是一款免费开源工具,源码托管在GitHub上,获取渠道主要有三种。

第一种是直接使用在线转换网站。这类网站很多,输入网址就能把TTF拖上去、转完下载WOFF2文件。优点是零安装、操作门槛低,适合偶尔转一两个字体、不想折腾环境的场景。缺点是批量转换不方便,一次一个文件手动下载,而且有些网站会偷偷合并在线字体库、收集你上传的字体,商业字体谨慎处理。我自己不怎么用在线工具转字体,因为字体文件本身就是资产,能本地处理就本地处理。

第二种是使用Node.js的npm包。你在项目里执行一次npm install,就能全局或者局部引用ttf2woff2并调用它的命令行接口。这种方式对前端工程师最友好,因为几乎每个人的开发环境里都装了Node.js,省去额外安装依赖的麻烦。而且可以写脚本批量处理,适合一次转换几十个文件的场景。

第三种是使用预编译好的二进制程序。woff2官方库的Release页面会提供Windows、macOS、Linux各平台的编译版本,下载下来直接命令行调用。这种方式不依赖Node环境,转换性能最高、速度最快,适合需要高频批量处理字体的场景。

考虑到多数人在日常开发中已经装了Node.js,我下面以npm方式为例做详细演示。

3.2 全局安装与基础命令实战

先安装。打开终端,执行:

npm install -g ttf2woff2

装完之后,你会在全局环境下获得一个可执行的ttf2woff2命令。最简单的用法是这样的:

ttf2woff2 input.ttf output.woff2

把input.ttf换成你的源文件路径,output.woff2换成你想输出的文件名。回车之后,当前目录下就会生成对应的WOFF2文件。

看起来是不是简单到不像话?但这个命令有两个隐藏点得注意。第一个,它不支持在命令行直接写输出路径时目录不存在的情况。如果你指定的输出目录不存在,转换会直接失败,不会自动帮你创建文件夹。第二个,输入文件必须是标准TTF文件。如果你手里是OTF,就得先看看它内部的轮廓类型。按照我之前的经验,带有CFF轮廓的OTF文件,用这个工具也能处理,但前提是文件名后缀和实际格式要对得上,别拿个改名改出来的假TTF去转。

如果你只是想快速验证一下转换效果,可以先不指定输出文件,让工具把转换结果输出到标准输出流,然后重定向到文件里:

ttf2woff2 < input.ttf > output.woff2

这种做法的好处是能配合管道和其他命令做更灵活的批次处理。

再提供一个我常用的高级姿势。如果你只装了Node环境、不想装全局包,可以用npx一次性执行:

npx ttf2woff2 input.ttf output.woff2

npx会临时拉取npm包然后执行命令,适合在CI/CD流水线里偶尔用一次。

3.3 转换效果的验证方式

转换完成后,别急着上线,先验证一下。我习惯做三件事。

第一件,对比文件体积。在终端用ls -lh查看新旧文件的体积变化,确认压缩率是否符合预期。如果压缩率异常低,比如从5MB压到4.9MB,那大概率是转换过程没走对,或者字体本身已经非常精简了,需要排查一下。

第二件,检查字体是否能正常加载。把WOFF2文件丢到项目里,写一个最简单的测试页面,引用@font-face并写上对应的font-family,然后在浏览器里看看页面上的文字是否正常渲染。如果显示的是默认字体甚至出现方块字,说明文件有问题或者CSS引用方式不对。

第三件,用fonttools这类的Python库检查一下WOFF2内部的结构完整性,确认字体表没有被破坏。不过一般的场景下,浏览器能正常渲染就基本没问题,这步大多数时候用不上。

3.4 实践:用Node脚本批量转换整个字体目录

经常遇到的情况是:客户扔过来一个压缩包,里面是几十个品牌的付费字体,每个都是TTF,全都要转换。手动一个一个敲命令,不仅累,还容易漏。

于是我会在项目里放一个批量转换脚本,用Node.js写,大致逻辑是这样的:

const fs = require('fs'); const path = require('path'); const ttf2woff2 = require('ttf2woff2'); const srcDir = './fonts/ttf'; const outDir = './fonts/woff2'; if (!fs.existsSync(outDir)) { fs.mkdirSync(outDir, { recursive: true }); } const files = fs.readdirSync(srcDir).filter(file => file.toLowerCase().endsWith('.ttf')); files.forEach((file, index) => { const inputPath = path.join(srcDir, file); const outputName = file.replace(/\.ttf$/i, '.woff2'); const outputPath = path.join(outDir, outputName); const inputBuffer = fs.readFileSync(inputPath); const outputBuffer = ttf2woff2(inputBuffer); fs.writeFileSync(outputPath, outputBuffer); console.log(`[${index + 1}/${files.length}] 已转换: ${file}`); }); console.log('全部转换完成');

这个脚本的流程很简单:读目录、筛选TTF文件、逐个调用ttf2woff2库函数、输出到目标文件夹、打印进度。跑完之后,整个字体目录就全部转换完毕。

有了这个脚本,后面再拿到新字体,丢进ttf目录跑一下,几十秒收工,不用再走一遍安装和手敲命令的流程。

4. 字体压缩更进一步的思路:子集化与工具链配合

4.1 子集化的本质:只保留你用得到的字符

讲到这儿我要多说一句。WOFF2的压缩能力虽强,但面对全量中文字体包,压缩率仍然有限——毕竟中文字符集本身就是海量数据,几万个字形放在那里,就算压缩算法再厉害,也压不出一朵花来。

真正让中文字体体积从“不可用”变为“完全可用”的,是子集化。

子集化这个概念,说白了就是“只打包你用得到的字”。一个新闻网站,可能只需要简体常用的3500字;一个英文电商网站,只需要26个字母加数字加标点;一个只做数字展示的仪表盘页面,甚至只需要0-9几个字符外加一个百分号。

做完子集化之后,字体文件体积往往能压缩掉80%甚至90%。然后你再把子集化后的TTF转成WOFF2,最终得到的文件可能只有100KB甚至更小,加载速度和用系统字体几乎没差别。

4.2 常用子集化工具:fonttools与fontmin

做子集化,我常用的有两个工具。

一个是Python的fonttools库,里面的pyftsubset命令行工具非常强大。它支持按字符集、Unicode范围、语言标签等多维度筛选。举例来说,如果你要只保留简体中文字符,可以用这样的命令:

pyftsubset source.ttf --text="你好世界测试字体" --output-file=subset.ttf

但实际操作中,你不会手动把所有需要的文字写进命令行。更合理的做法是准备一个文本文件,把页面里实际出现的内容都丢进去,然后让工具按文本内容筛字形。命令长这样:

pyftsubset source.ttf --text-file=used_chars.txt --output-file=subset.ttf

这样工具会挨个检查used_chars.txt里的字符,保留出现过的那部分字形,去除其余所有字。要注意的是,中文全角标点、数字、英文都要包括在文本里,漏一个,页面上就缺一个字的显示。

另一个是fontmin,这是一个基于Node.js的工具,界面图形化操作简单,适合不太擅长命令行的朋友。你也可以在自己的Node脚本里调用fontmin的API,实现自动化子集化。

我个人的习惯是先用pyftsubset做子集化,再用ttf2woff2做格式转换,两者配合起来非常流畅。

4.3 把转换和压缩整合进构建流程

如果你用的是Webpack、Vite这类现代构建工具,字体处理完全可以自动化。这里的关键点在于:不希望每次构建都重新做一遍子集化和转换,最好只处理一次,把结果提交到仓库里,构建时引用处理完的成品文件。

具体做法是:

先把所有原始字体存放在assets/fonts-src目录,写一个脚本一次性完成“子集化+转WOFF2”,把产物输出到assets/fonts目录。然后在CSS里直接引用assets/fonts下的WOFF2文件。构建工具会原样拷贝字体文件,不做重复压缩。

这样做的另一个好处是,团队成员不需要每个人都安装Python和Node库,只有维护字体脚本的人需要操心工具链,其他人只关心结果文件。字体文件属于低频变动资源,没必要让它在每次构建时都走一遍处理流程。

4.4 一个隐藏很深但很实用的小细节:字符集选择与页面状态

我做过的字体优化项目里,有一个印象很深的案例。某客户要上线一个二手车报价页面,页面里大量使用了数字、车型英文、城市名等字符。最初我们的字体子集化方案只按网页正文内容筛字,结果上线后发现,车辆报价的数字偶尔会显示成默认字体。

排查后发现原因:报价数字是前端动态渲染的,静态HTML里没有出现,所以按静态文本筛字时把这些数字漏掉了。后来我调整策略,除了把静态文本拿去筛字,还把可能动态出现的数字、英文字母、常用标点符号全部手动加进去,问题才解决。

这里想提醒大家的是:子集化之前,务必想清楚页面上会动态出现的所有字符。JS状态变化、接口返回数据、用户输入内容,这些都会影响最终需要渲染的字符集合。宁可多保留几十个可能用不到的字,也比缺字导致页面出现字体断层要好。

5. 常见问题与排查技巧实录

5.1 转换后字体加载不出来的几种典型原因

我见过太多人问“为什么我转了WOFF2之后字体显示不出来”,但绝大部分原因不是转换失败,而是使用环节出了岔子。我把高频问题整理成了一张速查表,方便你有问题直接对照:

现象可能原因解决办法
浏览器控制台提示字体文件报错文件其实不是真正的WOFF2格式用另一个工具重新转换,或检查源文件是否损坏
字体命中但页面显示默认字体@font-face里font-family名字写错对比CSS里的font-family和字体文件内的name表
中文显示成方块、空心框子集化漏字检查使用的字符是否都包含在子集范围内
某些特殊字符渲染异常字体本身不支持这些字符换字体或补充后备字体列表
手机端正常但旧桌面浏览器不正常浏览器不支持WOFF2保留WOFF或TTF作为后备字体源
文件体积压缩率不理想子集化未做,或字体本身高度优化过先做子集化再转格式,另外检查字体是否已精简

5.2 常见错误之一:@font-face定义顺序导致没有生效

有些人会在同一个@font-face规则里同时写多个格式的src,但实际上不同格式应该用不同的src字条来区分。推荐写法是这样的:

@font-face { font-family: 'MyFont'; src: url('myfont.woff2') format('woff2'), url('myfont.woff') format('woff'), url('myfont.ttf') format('truetype'); font-weight: normal; font-style: normal; font-display: swap; }

这段CSS的含义是:浏览器先尝试下载WOFF2,如果不支持就退回WOFF,再不行就退回TTF。format后面的标注不是随便写的,必须和实际文件格式对应,写错会被浏览器直接忽视。

有个细节要注意,url里如果写了woff2后缀但文件其实是woff格式,不信你看看那些“下到一半就报错的字体”,十有八九是这个原因。

5.3 常见错误之二:字体权限问题被忽视

转换工具本身是格式转换,不涉及版权判断。但你是不是有权转换和分发字体,这是另一回事。

从我个人的专业立场出发,必须提醒一句:在转换字体之前,确认你对该字体的使用权限——是购买了商用授权,还是字体本身开源免费,或者你有权用于特定项目。字体届的版权纠纷屡见不鲜,尤其是中文字体厂商对商用未授权行为的态度一向比较强硬。ttf2woff2只是一个工具,它不筛选授权,但你要对使用行为负责。

如果字体是开源可商用的,请保留字体文件自带的license信息和元数据,这些信息会在转换过程中继续保留。虽然体积变大了一点,但在授权合规层面是必不可少的。

5.4 转换后体积不降反升的排查思路

正常情况下WOFF2一定比TTF小,但偶尔会遇到反例,比如转换后体积反而变大。这时候按顺序排查:

先看源字体是不是已经过度压缩过。某些字体厂商会发布自带压缩的变体,比如一些专门做Web优化的字体,本身就经过精简化处理。对这种字体再转WOFF2,收益极小。

再看工具是否正常工作。运行ttf2woff2时,如果输入的TTF文件实际是OTF但改了后缀,工具可能识别出问题。你可以用fonttools的ttx命令检查一下文件内部的表结构,确认输入文件确实是合法的TTF格式。

最后看字体本身的轮廓复杂度和字形数量。一个字形数超过十万的字体,无论如何压缩都不会小到哪去。这时候考虑子集化才是正确的思路。

5.5 实际项目中最容易忽略的一个问题:font-display

我还想提醒一个和字体转换相关的Web标准属性:font-display。设置成swap之后,在字体文件加载完成之前,浏览器会用后备字体立即渲染文字,字体就绪之后再切换回目标字体。

对用户体验而言,这个设置能极大缓解“文字闪烁”或“文字不可见”的等待问题。我的建议是,转换成WOFF2之后一定在@font-face里加上这一行。别看它只是一个小属性,实际体验差异巨大——尤其对字体文件体积较大的中文字体,能明显减少用户等待时的白屏感。

6. 一次完整的优化实战复盘

6.1 项目背景与初始状态

我去年接了一个文化类网站的性能优化项目。客户的内容以老照片和文字为主,页面设计上大量使用了思源宋体和一套定制的标题字体,两套字体都是全量中文字符集TTF格式,加起来体积接近17MB。

初始状态下,打开首页需要同时下载这两套字体文件。官网的数据显示,用户平均需要等待约4.2秒才能看到完整效果,移动端用户更夸张,接近6秒。客户的反馈是“页面文字一开始都是默认字体,然后突然跳变,体验很糟糕”。

这个问题的核心就两个字:体积。字体文件太大,加载时间太长,文本主要内容依赖字体渲染出来展示效果,而字体跟不上的话整个视觉就垮了。

6.2 分三步优化的处理过程

第一步,做子集化。我把网站页面上实际出现的文字内容全部提取出来,合并去重,得到一个约1200个汉字的列表。再加上数字、英文、常用全角标点,总共约1300个字符。用fonttools的pyftsubset命令对两套字体分别做子集化,体积直接从17MB砍到约3.5MB。

第二步,转WOFF2。对子集化后的TTF文件再用ttf2woff2做一次格式转换,最终两套字体重叠加起来约1.8MB。这一轮的优化已经立竿见影,但还可以继续。

第三步,合并发布与浏览器缓存策略。字体文件放到CDN上,配置了较长的缓存时间。因为字体文件本身是低频变动的资源,给缓存设置一年也不会出问题,只要更新时改文件名即可。

6.3 优化后的数据对比

优化完成后,我用Chrome DevTools的网络面板做了多轮实测,数据如下:

指标优化前优化后变化
字体文件总大小17MB1.8MB下降约89%
首屏文字渲染时间(4G)4.2秒0.9秒下降约79%
首屏文字渲染时间(3G)6.1秒2.3秒下降约62%
用户看到字体跳变的情况明显基本消除显著改善

客户很满意这组数据,但我想说明的是,这个优化效果不是单独来自WOFF2,而是“子集化+WOFF2转换+浏览器缓存”三者共同作用的结果。每个环节都起了作用,缺一不可。

这个案例也验证了我一贯的观点:字体文件优化是网页性能优化里“性价比”极高的一个方向。图片、JS、CSS的优化往往要做很多精细调整,而字体的优化,往往一个工具链组合拳打下来,见效非常快。

6.4 从这次实战里总结出的经验

经过这个项目,我给自己定下了几条处理字体文件的规矩:

第一,凡是大于500KB的字体文件,一律考虑子集化加格式转换,在不影响视觉前提下尽可能压缩体积。

第二,子集化时考虑动态内容的字符集需求,宁可多留,不能漏字。

第三,字体更新改文件名发布,配合CDN长缓存,做到一次发布、长期生效。

第四,保留原始TTF文件归档,任何时候要重新子集化、重新调参,都有原始素材可以回溯。

第五,字体文件统一放在独立目录,命名规范带上版本号和字符集范围,比如plus-sans-v1-3500-subset.woff2,清晰明了,过两个月再回来看也不费劲。

7. 命令参数速查与注意事项清单

7.1 ttf2woff2常见用法速查

写到这里,我把ttf2woff2最常见的使用场景和命令整理出来,方便随手查阅:

# 基础转换,指定输出文件 ttf2woff2 input.ttf output.woff2 # 配合管道操作,输出到标准输出流后重定向 ttf2woff2 < input.ttf > output.woff2 # 配合Node脚本做批量处理 node batch-convert.js # 配合npx,无需全局安装 npx ttf2woff2 input.ttf output.woff2

如果你是第一次使用,只记前两个命令行就够了。批量处理场景直接用第三节我给的那个Node脚本模板,替换路径就能跑。

7.2 完整工作流推荐

我再推荐一套我目前最顺手的字体优化工作流,照着做基本不会踩坑:

第一步,整理源字体。所有TTF/OTF文件存放在工作目录,保持原始文件名和版本号,方便回溯。

第二步,准备字符集文件。写一个chars.txt,里面包含你页面需要的所有字符。有动态内容的话,一定要把动态可能出现的数字、英文字母、标点一并列进去。

第三步,子集化。用pyftsubset把字符集文件应用到源字体,生成子集化后的TTF文件。这一步是体积优化的最大功臣。

第四步,转换格式。用ttf2woff2把子集化后的TTF转成WOFF2,得到最终产物。

第五步,验证与发布。本地开一个静态服务器,HTML里引用WOFF2字体,确认渲染正常,然后通过CDN发布并配置缓存。

7.3 使用ttf2woff2的注意事项

由于上一节放了一张问题排查表,这里我就不重复列那些现象和原因了,单独讲几个容易踩的坑。

第一个坑,输入文件路径和输出文件路径不能相同。你可能觉得这不需要提醒,但我真的见过有人这样操作,然后发现文件被损坏了。工具在读取输入文件的同时往同一个路径写入输出数据,两边的读写请求冲突,文件就废了。要输出到同目录时,换一个新文件名就好。

第二个坑,不要在输出文件名里包含中文字符或空格。有些构建工具的字体加载流程对含空格或非ASCII字符的路径处理不够稳定,会导致字体加载失败。规范的命令是全部用小写字母、连字符和下划线。

第三个坑,转换工具的版本差异会导致输出结果略有差异。团队协作时,固定工具版本,避免不同成员的本地环境产生结果不一致的问题。npm包的话,可以在package.json里锁定版本号做固定。

8. 最后分享一点个人习惯

我现在做一个新网站,从设计稿阶段就会考虑字体方案:能不用自定义字体就不用;必须用的话,优先找有WOFF2版本的字体;没有WOFF2版本就自己转;中文全量字体一定做子集化。这套思路执行下来,我觉得字体的加载问题基本从“焦虑”变成了“理所当然”。

ttf2woff2这个工具本身很小,小到你可能用完之后就忘了它的存在,但它解决的问题是真实存在的:网页加载速度、移动端体验、CDN流量成本、用户留存率。一个字体格式的小小转换,背后这些指标都在发生改变。

如果你现在正在为网站字体加载慢发愁,建议立刻试试把TTF转WOFF2,看看你的字体文件能瘦多少身。如果转完之后效果不错,欢迎回来交流一下具体数据,我对不同字体的实际压缩率分布还挺好奇的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询