<link rel='preload' href='/fonts/icon.woff2'
      as='font' type='font/woff2' crossorigin>

给字体加了 preload,网络面板里同一个 woff2 出现两次请求,第二次还带着 3 秒延迟,控制台没有明显报错。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,as 属性写错时浏览器按错误的类型预加载,真正解析到 @font-face 时匹配不上,只能重新请求。加上 crossorigin 缺失,字体请求还会再走一次匿名连接。

围绕「preload as 类型」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

处理上按这个顺序:把 as 改成 font 并补上 type 和 crossorigin 三项缺一不可;preload 的地址和 @font-face 里的地址保持完全一致 连查询参数都要一样;改完看网络面板 同一个文件应该只出现一次。

改完只确认一件事:网络面板里字体只有一次请求,时序图里它排在样式表之前。

作者 9823189