预加载资源提示到底该怎么用才有效?
我最近在优化首屏加载速度,听说用 <link rel="preload"> 能提前加载关键资源,但试了之后发现浏览器根本不按预期加载,甚至有时候还报 warning 说资源没被使用。
比如我这样写:
<head>
<link rel="preload" href="/fonts/brand.woff2" rel="external nofollow" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/js/main.js" rel="external nofollow" as="script">
</head>
结果 font 确实预加载了,但 main.js 却没动静,控制台还提示 “The resource was preloaded but not used within a few seconds”。是不是我哪里写错了?
WP里面用
wp_enqueue_script加载JS时,默认都会带个?ver=xxx的版本号参数。你预加载写的是/js/main.js,但页面底部实际加载的可能是/js/main.js?ver=1.0.0。在浏览器眼里这俩完全不是同一个东西,所以预加载的资源没被用上,自然就报警告了。既然是WP站点,就别在
header.php里手写 link 标签了,用钩子去动态获取真实路径最稳。直接把这段代码扔进你的functions.php或者插件里:这样做的原理是拦截WP输出的script标签,把里面真实的URL(包含版本号)拿出来,生成一个一模一样的preload标签插在前面。这样浏览器预加载完,紧接着执行脚本,资源立马就能用上,警告自然也就消失了。字体也是同理,建议用
style_loader_tag或者直接在wp_enqueue_style的时候处理,保证URL绝对匹配才是王道。