HTML5中为何需要预加载,实现方法是什么
Admin 2022-07-15 群英技术资讯 505 次浏览
在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是:
利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效率就快了.
举个例子说明:比如要预先加载某个页面,可以这样:
<link rel="prefetch" href="http://www.example.com/"> <!-- Firefox -->
但如果是google的话,要用另外的一个名称,即:
<link rel="prerender" href="http://www.example.com/"> <!-- Chrome -->
即使在不支持的浏览器,用了这个特性其实是不会出错的,只不过浏览器解析不到而已, 所以,如果你感觉能有办法预先预测到用户期望点的页面(比如用户看最新的受欢迎的热图,他 可能看了第一页后,会继续看下一页,这个时候就可以用预先加载这个特性了).比如 :
<link rel="prefetch" href="<?php echo get_next_posts_page_link(); ?>">
而单独取一张图片也是可以的,比如:
<link rel="prefetch" href="/images/test.jpg"/>
有了浏览器缓存,为何还需要预加载?
1.用户可能是第一次访问网站,此时还无缓存
2.用户可能清空了缓存
3.缓存可能已经过期,资源将重新加载
4.用户访问的缓存文件可能不是最新的,需要重新加载
5.Chrome 的预加载技术
现在的 chrome 聪明到根据你的浏览记录,预测到你可能访问或搜索哪些网站,在你打开网站之前就加载好了一些资源了。
举个栗子,当你在搜索框输入 "amaz" 时,它猜测到你可能要访问 amazon.com,可能就帮你加载了这个网站的一些资源。
如果这个预测算法精准的话,就能大大地提高用户的浏览体验了。
DNS prefetch
我们知道,当我们访问一个网站如 www.amazon.com 时,需要将这个域名先转化为对应的 IP 地址,这是一个非常耗时的过程。
DNS prefetch 分析这个页面需要的资源所在的域名,浏览器空闲时提前将这些域名转化为 IP 地址,真正请求资源时就避免了上述这个过程的时间.
<meta http-equiv='x-dns-prefetch-control' content='on'> <link rel='dns-prefetch' href='http://g-ecx.images-amazon.com'> <link rel='dns-prefetch' href='http://z-ecx.images-amazon.com'> <link rel='dns-prefetch' href='http://ecx.images-amazon.com'> <link rel='dns-prefetch' href='http://completion.amazon.com'> <link rel='dns-prefetch' href='http://fls-na.amazon.com'>
应用场景1:我们的资源存在在不同的 CDN 中,那提前声明好这些资源的域名,就可以节省请求发生时产生的域名解析的时间。
应用场景2:如果我们知道用户接下来的操作一定会发起一起资源的请求,那就可以将这个资源进行 DNS-Prefetch,加强用户体验。
Resource prefetch
在 Chrome 下,我们可以用 link标签声明特定文件的预加载:
<link rel='subresource' href='critical.js'> <link rel='subresource' href='main.css'> <link rel='prefetch' href='secondary.js'>
在 Firefox 中或用 meta 标签声明:
<meta http-equiv="Link" content="<critical.js>; rel=prefetch">
rel='subresource' 表示当前页面必须加载的资源,应该放到页面最顶端先加载,有最高的优先级。
rel='prefetch' 表示当 subresource 所有资源都加载完后,开始预加载这里指定的资源,有最低的优先级。
注意:只有可缓存的资源才进行预加载,否则浪费资源!
Pre render
前面说到的预解析DNS、预加载资源已经够强悍了有木有,可还有更厉害的预渲染(Pre-rendering)!
预渲染意味着我们提前加载好用户即将访问的下一个页面,否则进行预渲染这个页面将浪费资源,慎用!
<link rel='prerender' href='http://www.pagetoprerender.com'>
rel='prerender' 表示浏览器会帮我们渲染但隐藏指定的页面,一旦我们访问这个页面,则秒开了!
在 Firefox 中或用 rel='next' 来声明
<link rel="next" href="http://www.pagetoprerender.com">
不是所有的资源都可以预加载
当资源为以下列表中的资源时,将阻止预渲染操作:
1.URL 中包含下载资源
2.页面中包含音频、视频
3.POST、PUT 和 DELETE 操作的 ajax 请求
4.HTTP 认证(Authentication)
5.HTTPS 页面
6.含恶意软件的页面
7.弹窗页面
8.占用资源很多的页面
9.打开了 chrome developer tools 开发工具
手动触发预渲染操作
在 head 中强势插入 link[rel='prerender'] 即可:
var hint =document.createElement("link") hint.setAttribute(“rel”,”prerender”) hint.setAttribute(“href”,”next-page.html”) document.getElementsByTagName(“head”)[0].appendChild(hint)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是CSS3中实现颜色渐变的方法。下文给大家介绍了两个实现渐变语句,分别是background:radial-gradient(类型 大小 位置,颜色1,颜色n..)和background:linear-gradient(方向,颜色1,颜色n..),其中,一个是元素径向渐变,一个元素线性渐变。下面我们详细的来看看具体的实现及代码。
在css中,可以利用“letter-spacing”属性设置表格的字间距,该属性的作用就是增加或减少字符间的间距,只需要给表格元素添加“letter-spacing:间距值;”样式即可。
这篇文章主要给大家介绍css中匹配的相关内容,一些朋友可能知道css中匹配方式有模糊匹配和全局匹配,但是还是会遇到一些匹配相关的问题,因此这篇文章就给大家分享一下关于匹配的问题的解决方法,感兴趣的朋友可以参考。
CSS中的2D转换的实现有几种,是怎样的?下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
不依赖javascript,直接使用纯css实现 svg 的描边绘制动画效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008