You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var hint =document.createElement("link")
hint.setAttribute(“rel”,”prerender”)
hint.setAttribute(“href”,”next-page.html”)
document.getElementsByTagName(“head”)[0].appendChild(hint)
预备知识
正文
prefetch 即预加载,在用户需要前我们就将所需的资源加载完毕。
有了浏览器缓存,为何还需要预加载?
Chrome 的预加载技术
现在的 chrome 聪明到根据你的浏览记录,预测到你可能访问或搜索哪些网站,在你打开网站之前就加载好了一些资源了。
举个栗子,当你在搜索框输入
“amaz”
时,它猜测到你可能要访问amazon.com
,可能就帮你加载了这个网站的一些资源。如果这个预测算法精准的话,就能大大地提高用户的浏览体验了。
DNS prefetch
我们知道,当我们访问一个网站如
www.amazon.com
时,需要将这个域名先转化为对应的 IP 地址,这是一个非常耗时的过程。DNS prefetch 分析这个页面需要的资源所在的域名,浏览器空闲时提前将这些域名转化为 IP 地址,真正请求资源时就避免了上述这个过程的时间。
应用场景1: 我们的资源存在在不同的 CDN 中,那提前声明好这些资源的域名,就可以节省请求发生时产生的域名解析的时间。
应用场景2: 如果我们知道用户接下来的操作一定会发起一起资源的请求,那就可以将这个资源进行 DNS-Prefetch,加强用户体验。
Resource prefetch
在 Chrome 下,我们可以用
<link>
标签声明特定文件的预加载:在 Firefox 中或用 meta 标签声明:
rel=’subresource’
表示当前页面必须加载的资源,应该放到页面最顶端先加载,有最高的优先级。rel=’prefetch’
表示当subresource
所有资源都加载完后,开始预加载这里指定的资源,有最低的优先级。注意:只有可缓存的资源才进行预加载,否则浪费资源!
Pre render
前面说到的预解析DNS、预加载资源已经够强悍了有木有,可还有更厉害的预渲染(Pre-rendering)!
预渲染意味着我们提前加载好用户即将访问的下一个页面,否则进行预渲染这个页面将浪费资源,慎用!
rel=’prerender’
表示浏览器会帮我们渲染但隐藏指定的页面,一旦我们访问这个页面,则秒开了!在 Firefox 中或用
rel=’next’
来声明不是所有的资源都可以预加载
当资源为以下列表中的资源时,将阻止预渲染操作:
手动触发预渲染操作
在 head 中强势插入
link[rel=’prerender’]
即可:兼容性
这么好用的特性,当然要考虑各浏览器的兼容程度了
DNS pre-fetching
但管它叫prefetch
。dns-prefetch
和prefetch
是等价的。其他方面的测试,目前还没有很好的方案,暂且只能通过查看浏览器是否缓存来测试。
chrome developer tools 开发工具
会阻止页面的预渲染,所以我们看不到这个过程,但可以在 - --chrome://cache/
或chrome://net-internals/#prerender
中查看。about:cache
中查看。The text was updated successfully, but these errors were encountered: