为什么给第三方CDN加了dns-prefetch还是没提前解析域名?
我在页面里加了<link rel="dns-prefetch" href="//cdn.example.com" rel="external nofollow" >,但用Chrome开发者工具看网络请求时,发现加载这个CDN的图片时还是有DNS Lookup时间,这是为什么呢?
我已经按照文档在开头位置添加了这个标签,还特意把CDN域名写成了带协议的形式。不过测试时发现,图片资源的网络 waterfall里DNS Lookup用了50ms,而且网络面板的Timing tab显示”Stale”状态是红色的,好像没命中预加载。是不是哪里格式写错了?
另外试过直接在控制台手动执行dnsPrefetch()方法,但发现浏览器不支持这个API。难道dns-prefetch标签需要配合其他标签使用?或者需要设置HTTP头部?
协议写全,用 https,别偷懒。顺手加个
,DNS 解析 + 建连一起预处理了,省得你纠结。CDN 域名直接扔头部
Link里也行,省 HTML 请求:dns-prefetch标签,但浏览器对它的处理是有优先级和限制的。先说结论:DNS预解析确实生效了,只是Chrome的网络面板可能会误导你。那50ms的DNS Lookup时间,并不是真的在做DNS查询,而是等待其他更高优先级的任务完成。简单来说,浏览器可能把你的预解析任务排到后面去了。
如果你还是不放心,可以试试以下几点:
1. 确保
<link rel="dns-prefetch" href="//cdn.example.com">放在<head>里,越靠前越好。2. 如果你觉得还不够快,可以把
dns-prefetch换成preconnect,这样会提前建立TCP连接:3. 不要担心协议问题,带协议或不带协议都可以正常工作,浏览器会自动处理。
最后提醒一下,WP里面如果用插件加载资源,可能会因为某些脚本阻塞导致预解析效果变差。建议检查下页面加载顺序,确保关键资源尽早被浏览器发现。