如何减少字体子集导致的额外HTTP请求? Des.俊杰 提问于 2026-02-10 00:44:24 阅读 40 优化 在项目里用Web字体时发现,每个字体文件都会单独发起HTTP请求,比如这样:@font-face{src:url('font.woff2')},这样首屏加载好慢啊。 试过把字体文件转成base64内联,但发现woff2转base64后代码体积反而变大了,比如原本20KB的字体文件变成30KB左右的字符串。 现在卡在字体优化这一步,有什么更好的办法既能减少请求次数又不显著增加主包体积吗?webpack的file-loader和url-loader应该怎么配置? 我来解答 赞 23 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 一巧云 Lv1 省事的话直接用woff2压缩字体,然后通过font-display: swap减少阻塞,再把多个字体文件合并成一个woff2用unicode-range做子集分隔,一个请求搞定。webpack配个file-loader把字体输出到同目录就行,别用base64。 @font-face { font-family: 'MyFont'; src: url('fonts.woff2') format('woff2'); font-display: swap; unicode-range: U+0000-00FF; /* ASCII */ } @font-face { font-family: 'MyFont'; src: url('fonts.woff2') format('woff2'); font-display: swap; unicode-range: U+0100-024F; /* Latin Extended */ } 回复 点赞 5 2026-02-12 08:09 Dev · 志鲜 Lv1 把多个字体文件合并成一个woff2,用unicode-range做子集分割,这样一次请求能缓存住整套字体,后续按需加载子集。base64确实会膨胀,别用。 webpack配file-loader的时候加publicPath,把字体打到cdn,然后用font-display: swap避免阻塞渲染。关键配置: { test: /.(woff|woff2|eot|ttf|otf)$/, use: [{ loader: 'url-loader', options: { limit: 8192, fallback: 'file-loader', name: 'fonts/[name].[hash:8].[ext]', publicPath: '//cdn.yoursite.com/' } }] } 再配合splitChunks把字体单独拆包,和主逻辑分离。首屏只加载中文标题需要的那部分字形,正文用系统字体过渡也行。 拿去改改,记得清缓存测效果。 回复 点赞 6 2026-02-10 01:07 加载更多 相关推荐 1 回答 18 浏览 Angular里用HttpClient发请求为啥收不到响应数据? 我在Angular组件里用HttpClient调后端接口,请求能发出去,Network面板也看到返回了200和JSON数据,但subscribe里拿不到data,控制台还报错说“Cannot read... 欧阳胜洋 框架 2026-02-28 23:31:20 2 回答 24 浏览 Charles抓包手机HTTPS请求失败怎么办? 我用Charles调试移动端接口,HTTP请求能正常抓到,但一换成HTTPS就显示SSL handshake failed。手机已经装了Charles的根证书,也信任了,iOS 16系统,设置里证书状... UP主~永香 工具 2026-02-27 14:53:20 2 回答 47 浏览 Angular HttpClient 设置请求头后为什么没生效? 在Angular项目里用HttpClient发送POST请求时设置了Authorization头,但后端一直返回401。检查代码没问题,重启服务也没用,是不是哪里漏掉了配置?求大神指点! 代码这样写的... 慕容奕同 框架 2026-02-17 09:11:47 2 回答 25 浏览 为什么我的Charles配置好了却抓不到手机的HTTPS请求? 我按教程配置了Charles的HTTPS代理,手机也设置了代理并安装了证书,但访问App时请求还是显示“Connection refused”。/* 我在App的WebView里看到的错误样式 */ ... UE丶玉宁 工具 2026-02-10 15:06:31 2 回答 28 浏览 Wireshark抓包时怎么只过滤前端相关的HTTP请求? 我在用Wireshark调试前端项目时,发现抓到的HTTP请求里夹杂了很多静态资源和第三方广告的流量,想只看自己写的API请求。之前尝试用http过滤,但还是有很多无关数据。有没有办法根据URL路径或... 开发者兰兰 前端 2026-02-06 11:58:29 1 回答 71 浏览 Vue移动端HTTPS页面请求http接口导致Mixed Content错误怎么办? 我在开发Vue移动端应用时遇到了HTTPS问题,当页面切换到HTTPS后,调用本地测试接口时控制台报Mixed Content错误。尝试过在nginx配置强制HTTPS,但真机测试还是加载失败。 代码... 子晨的笔记 移动 2026-02-04 17:23:31 2 回答 65 浏览 Burp Suite配置HTTPS抓包一直拦截不到请求怎么办? 在用Burp测试网站时,配置了代理和安装CA证书后,HTTP请求能正常拦截,但HTTPS请求就是进不去拦截器,浏览器还提示证书不受信任。我试过清浏览器缓存、重装证书、换8080/8090端口都不行,B... 松奇 安全 2026-02-03 17:13:34 2 回答 43 浏览 为什么启用HTTP2后多个请求还是排队发送? 我给网站启用了HTTP/2,但发现同时发送的多个fetch请求还是在排队执行。比如同时请求三个图片资源,网络面板显示还是按顺序发送,这不应该是多路复用吗? 我用下面的代码测试的,服务器是Nginx 1... 闲人明轩 优化 2026-01-29 11:43:48 2 回答 42 浏览 Fiddler抓不到HTTPS请求的响应内容怎么办? 用Fiddler调试时发现,发给https://api.example.com的请求在会话里显示为空响应体,明明已经安装了证书。 我写了个测试页面用fetch调用接口:<pre class=&q... A. 新利 前端 2026-01-26 01:25:29 1 回答 23 浏览 Charles抓包为什么看不到本地React开发的HTTPS请求? 我在用 create-react-app 搭建的项目里调用后端接口,本地启的是 https://localhost:3000,但 Charles 完全抓不到这些请求,明明代理已经开了,其他 HTTP ... 极客东旭 前端 2026-03-03 10:45:18
webpack配file-loader的时候加publicPath,把字体打到cdn,然后用font-display: swap避免阻塞渲染。关键配置:
再配合splitChunks把字体单独拆包,和主逻辑分离。首屏只加载中文标题需要的那部分字形,正文用系统字体过渡也行。
拿去改改,记得清缓存测效果。