如何减少字体子集导致的额外HTTP请求? Des.俊杰 提问于 2026-02-10 00:44:24 阅读 21 优化 在项目里用Web字体时发现,每个字体文件都会单独发起HTTP请求,比如这样:@font-face{src:url('font.woff2')},这样首屏加载好慢啊。 试过把字体文件转成base64内联,但发现woff2转base64后代码体积反而变大了,比如原本20KB的字体文件变成30KB左右的字符串。 现在卡在字体优化这一步,有什么更好的办法既能减少请求次数又不显著增加主包体积吗?webpack的file-loader和url-loader应该怎么配置? 我来解答 赞 20 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 */ } 回复 点赞 3 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把字体单独拆包,和主逻辑分离。首屏只加载中文标题需要的那部分字形,正文用系统字体过渡也行。 拿去改改,记得清缓存测效果。 回复 点赞 2 2026-02-10 01:07 加载更多 相关推荐 1 回答 30 浏览 Angular HttpClient 设置请求头后为什么没生效? 在Angular项目里用HttpClient发送POST请求时设置了Authorization头,但后端一直返回401。检查代码没问题,重启服务也没用,是不是哪里漏掉了配置?求大神指点! 代码这样写的... 慕容奕同 框架 2026-02-17 09:11:47 2 回答 16 浏览 为什么我的Charles配置好了却抓不到手机的HTTPS请求? 我按教程配置了Charles的HTTPS代理,手机也设置了代理并安装了证书,但访问App时请求还是显示“Connection refused”。/* 我在App的WebView里看到的错误样式 */ ... UE丶玉宁 工具 2026-02-10 15:06:31 2 回答 20 浏览 Wireshark抓包时怎么只过滤前端相关的HTTP请求? 我在用Wireshark调试前端项目时,发现抓到的HTTP请求里夹杂了很多静态资源和第三方广告的流量,想只看自己写的API请求。之前尝试用http过滤,但还是有很多无关数据。有没有办法根据URL路径或... 开发者兰兰 前端 2026-02-06 11:58:29 1 回答 48 浏览 Vue移动端HTTPS页面请求http接口导致Mixed Content错误怎么办? 我在开发Vue移动端应用时遇到了HTTPS问题,当页面切换到HTTPS后,调用本地测试接口时控制台报Mixed Content错误。尝试过在nginx配置强制HTTPS,但真机测试还是加载失败。 代码... 子晨的笔记 移动 2026-02-04 17:23:31 1 回答 54 浏览 Burp Suite配置HTTPS抓包一直拦截不到请求怎么办? 在用Burp测试网站时,配置了代理和安装CA证书后,HTTP请求能正常拦截,但HTTPS请求就是进不去拦截器,浏览器还提示证书不受信任。我试过清浏览器缓存、重装证书、换8080/8090端口都不行,B... 松奇 安全 2026-02-03 17:13:34 2 回答 34 浏览 为什么启用HTTP2后多个请求还是排队发送? 我给网站启用了HTTP/2,但发现同时发送的多个fetch请求还是在排队执行。比如同时请求三个图片资源,网络面板显示还是按顺序发送,这不应该是多路复用吗? 我用下面的代码测试的,服务器是Nginx 1... 闲人明轩 优化 2026-01-29 11:43:48 1 回答 33 浏览 Fiddler抓不到HTTPS请求的响应内容怎么办? 用Fiddler调试时发现,发给https://api.example.com的请求在会话里显示为空响应体,明明已经安装了证书。 我写了个测试页面用fetch调用接口:<pre class=&q... A. 新利 前端 2026-01-26 01:25:29 1 回答 35 浏览 为什么我的HTTPS页面加载时显示Mixed Content错误? 我在开发一个HTTPS网站时,发现用JavaScript请求HTTP接口会报Mixed Content错误。明明服务器已经配置了SSL证书,为什么还是不行? 比如这个请求代码: fetch('... UX栾同 前端 2026-02-15 19:59:29 2 回答 17 浏览 如何在AJAX请求超时时正确取消未完成的请求? 在做搜索联想功能时,用户快速输入会导致之前的请求还没回来就覆盖了结果。我用XMLHttpRequest尝试用abort()取消,但代码写法好像有问题: let xhr; function search... 司马春萍 前端 2026-02-03 22:42:32 1 回答 42 浏览 React项目HTTPS部署后,为什么AJAX请求到http://api端点被阻止? 我在React项目里用fetch调用公司旧系统的API接口,开发环境用HTTPS没问题,但部署到HTTPS服务器后突然报错:"Mixed Content: The page was loaded ov... 浩轩酱~ 安全 2026-02-01 15:23:31
webpack配file-loader的时候加publicPath,把字体打到cdn,然后用font-display: swap避免阻塞渲染。关键配置:
再配合splitChunks把字体单独拆包,和主逻辑分离。首屏只加载中文标题需要的那部分字形,正文用系统字体过渡也行。
拿去改改,记得清缓存测效果。