详解HTML5中rel属性的prefetch预加载功效接纳,前端
分类:前端技术

前端质量优化 – 能源预加载

2015/11/19 · JavaScript · 预加载

原著出处: ROBIN RENDLE   译文出处:bubkoo的博客(@问崖的崖)   

当提到前端质量优化时,我们第一会联想到文件的会晤、压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更加快,客商能够飞快选拔我们的 Web 应用来完毕他们的目的。 

财富预加载是另三个属性优化技艺,大家得以采纳该技艺来预先告知浏览器有些能源可能在将来会被运用到。

引用 Patrick Hamann 的解释详解HTML5中rel属性的prefetch预加载功效接纳,前端质量优化。:

预加载是浏览器对未来或然被应用资源的一种暗示,一些财富得以在时下页面使用到,一些恐怕在昨天的少数页面中被使用。作为开荒人士,我们比浏览器越发通晓大家的采取,所以大家能够对大家的为主能源使用该技艺。

这种做法早已被喻为 prebrowsing,但那并不是一项单一的技艺,能够细分为多少个例外的手艺:DNS-prefetchsubresource 和正式的 prefetchpreconnectprerender

 

详解HTML5中rel属性的prefetch预加载成效选用,html5rel

在HTML5中,有个很有用但常被忽略的特点,正是事先加载(prefetch),它的法规是:
动用浏览器的空余时间去先下载客户内定必要的剧情,然后缓存起来,那样客商后一次加载时,就直接从缓存中抽取来,成效就快了.

举例表明:例如要优先加载某些页面,能够那样:

XML/HTML Code复制内容到剪贴板

  1. <link rel="prefetch" href="; <!-- Firefox -->    

但只若是google的话,要用别的的叁个称谓,即:

XML/HTML Code复制内容到剪贴板

  1. <link rel="prerender" href="; <!-- Chrome -->   

固然在不协助的浏览器,用了这么些特点其实是不会出错的,只但是浏览器深入分析不到而已,
因此,要是您认为能有艺术预先预测到客商期待点的页面(举例客户看最新的受款待的热图,他 大概看了第一页后,会三翻五次看下一页,今年就可以用事先加载这一个性情了).比方

XML/HTML Code复制内容到剪贴板

  1. <link rel="prefetch" href="<?php echo get_next_posts_page_link(); ?>">   

而独自取一张图纸也是能够的,举例:

XML/HTML Code复制内容到剪贴板

  1. <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 地址,真正诉求财富时就防止了上述这么些进度的日子。

XML/HTML Code复制内容到剪贴板

  1. <meta http-equiv='x-dns-prefetch-control' content='on'>  
  2. <link rel='dns-prefetch' href=';  
  3. <link rel='dns-prefetch' href=';  
  4. <link rel='dns-prefetch' href=';  
  5. <link rel='dns-prefetch' href=';  
  6. <link rel='dns-prefetch' href=';  

行使场景1:我们的财富存在在分歧的 CDN 中,那提前注解好这一个资源的域名,就能够省去央求产生时产生的域名剖判的时辰。
利用场景2:假诺我们领略客商接下去的操作必然会发起一同财富的伸手,那就足以将以此财富开展 DNS-Prefetch,加强客户体验。

Resource prefetch 在 Chrome 下,大家能够用 link标签申明特定文件的预加载:

XML/HTML Code复制内容到剪贴板

  1. <link rel='subresource' href='critical.js'>  
  2. <link rel='subresource' href='main.css'>  
  3. <link rel='prefetch' href='secondary.js'>  

在 Firefox 中或用 meta 标签评释:

XML/HTML Code复制内容到剪贴板

  1. <meta http-equiv="Link" content="<critical.js>; rel=prefetch">  

rel='subresource' 表示前段时间页面必得加载的财富,应该放权页面最上部先加载,有最高的前期级。
rel='prefetch' 表示当 subresource 全体财富都加载完后,早先预加载这里钦赐的能源,有最低的预先级。
留心:独有可缓存的财富才开展预加载,不然浪费能源!

Pre render 眼下聊起的预分析DNS、预加载能源已经够强悍了有木有,可还会有更决定的预渲染(Pre-rendering)!
预渲染意味着大家提前加载好顾客将要访谈的下一个页面,不然进行预渲染这几个页面将浪费能源,慎用!

XML/HTML Code复制内容到剪贴板

  1. <link rel='prerender' href=';  

rel='prerender' 表示浏览器会帮大家渲染但隐瞒内定的页面,一旦大家访谈那个页面,则秒开了!
在 Firefox 中或用 rel='next' 来声明

XML/HTML Code复制内容到剪贴板

  1. <link rel="next" href=";  

不是负有的财富都足以预加载 当财富为以下列表中的能源时,将截留预渲染操作:
1.UKoleosL 中蕴含下载财富
2.页面中蕴藏音频、录像
3.POST、PUT 和 DELETE 操作的 ajax 请求
4.HTTP 认证(Authentication)
5.HTTPS 页面
6.含恶意软件的页面
7.弹窗页面
8.攻陷能源众多的页面
9.打开了 chrome developer tools 开垦工具

手动触发预渲染操作 在 head 中强势插入 link[rel='prerender'] 即可:

JavaScript Code复制内容到剪贴板

  1. var hint =document.createElement("link")   
  2. hint.setAttribute(“rel”,”prerender”)   
  3. hint.setAttribute(“href”,”next-page.html”)   
  4. document.getElementsByTagName(“head”)[0].appendChild(hint)  

在HTML5中,有个很有用但常被忽视的性状,正是预先加载(prefetch),它的准绳是: 利用浏览器的...

DNS 预解析 DNS-Prefetch

由此 DNS 预分析来告诉浏览器今后我们大概从有个别特定的 UPAJEROL 获取财富,当浏览器真正使用到该域中的某些能源时就足以赶紧地成功 DNS 深入分析。举例,大家今后或者从 example.com 获取图片或音频能源,那么能够在文书档案顶端的 `` 标签中投入以下内容:

<link rel="dns-prefetch" href="//example.com">

1
<link rel="dns-prefetch" href="//example.com">

当我们从该 U途乐L 需要一个能源时,就不再须要静观其变 DNS 的分析进程。该工夫对使用第三方能源非常有用。

在 Harry Roberts 的文章中提到:

透过轻易的一行代码就足以告知那个包容的浏览器举办 DNS 预分析,那表示当浏览器真正诉求该域中的某个能源时,DNS 的深入分析就已经完毕了。

那不啻是三个比较细小的习性优化,显得也不要那么重大,但实际并非如此 – Chrome 平昔都做了仿佛的优化。当在浏览器的位置栏中输入 UEscortL 的一小段时,Chrome 就自行完毕了 DNS 预分析(以致页面预渲染),进而为各类要求节省了重在的年华。

预连接 Preconnect

与 DNS 预解析类似,preconnect 不止完毕 DNS 预分析,同临时间还将打开 TCP 握手和树立传输层公约。能够那样使用:

<link rel="preconnect" href=";

1
<link rel="preconnect" href="http://example.com">

在 Ilya Grigorik 的文章中有更详实的牵线:

当代浏览器都试着预测网址现在急需哪些连接,然后预先创设 socket 连接,进而消除昂贵的 DNS 查找、TCP 握手和 TLS 往返开销。可是,浏览器还远远不够聪明,并无法准确预测种种网址的保有预链接目的。万幸,在 Firefox 39 和 Chrome 46 中大家能够运用 preconnect 告诉浏览器大家需求张开什么样预连接。

预获取 Prefetching

比方大家规定有些财富今后势必会被应用到,大家能够让浏览器预先央求该财富并放入浏览器缓存中。举个例子,三个图纸和本子或别的能够被浏览器缓存的财富:

<link rel="prefetch" href="image.png">

1
<link rel="prefetch" href="image.png">

与 DNS 预深入分析不一样,预获取真正央求并下载了财富,并积存在缓存中。但预获取还依靠于有个别法则,有些预获取大概会被浏览器忽视,比方从二个相当缓慢的互连网中猎取一个一点都不小的字体文件。并且,Firefox 只会在浏览器闲置时实行能源预获取。

在 Bram Stein 的帖子中聊到,那对 webfonts 性能提高特别了然。如今,字体文件必得等到 DOM 和 CSS 创设达成之后才起来下载,使用预获取就能够轻便绕过该瓶颈。

注意:要测量试检验资金源的预获取有一点点不方便,但在 Chrome 和 Firefox 的互联网面板中皆有能源预获取的笔录。还须求记住,预获取的能源未有同源战术的界定。

Subresources

那是另多少个预获取措施,这种办法钦点的预获取能源具备最高的优先级,在具备 prefetch 项在此以前实行:

<link rel="subresource" href="styles.css">

1
<link rel="subresource" href="styles.css">

根据 Chrome 文档:

rel=prefetch 为未来的页面提供了一种低优先级的能源预加载格局,而 rel=subresource 为当前页面提供了一种高优先级的财富预加载。

据此,假如能源是日前页面必需的,或然财富须求尽早可用,那么最棒使用 subresource 而不是 prefetch

预渲染 Prerender

那是三个核火器,因为 prerender 能够事先加载文档的具备财富:

<link rel="prerender" href=";

1
<link rel="prerender" href="http://example.com">

Steve Souders 在他的一篇小说中写到:

那看似于在叁个逃匿的 tab 页中张开了某些链接 – 将下载全部能源、创制 DOM 结构、实现页面布局、应用 CSS 样式和试行 JavaScript 脚本等。当客商真正访谈该链接时,隐敝的页面就切换为可知,使页面看起来正是须臾间加载成功同样。Google找出在其即时追寻页面中曾经选择该手艺多年了,微软也宣称将在 IE1第11中学帮衬该性情。

亟待注意的是毫无滥用该特性,当你领会顾客一定会点击有些链接时才方可进行预渲染,不然浏览器将职责地下载全部预渲染要求的财富。

越来越多相关探究:

怀有预加载本事都设有贰个潜在的风险:对能源预测错误,而预加载的付出(抢占 CPU 财富,消功耗池,浪费带宽等)是慷慨振奋的,所以必得严谨行事。就算很难分明客户下一步将访谈哪些财富,但高可相信的场所确实存在:

  • 设若客户实现三个分包醒目结果的探索,那么结果页面极大概会被加载
  • 万一顾客步入到登入页面,那么登录成功的页面非常的大概会被加载
  • 设若客户阅读叁个多页的篇章或访谈二个分页的结果集,那么下一页很或许会被加载

最后,使用 Page Visibility API 能够免范页面真正可以见到前被实行。

Preload

preload 是多个新标准,与 prefetch 差别(大概被忽略)的是,浏览器一定会预加载该能源:

<link rel="preload" href="image.png">

1
<link rel="preload" href="image.png">

就算该规范还尚无被抱有浏览器包容,但其幕后的考虑依旧极其有趣的。

总结

预测客户下一步将拜望哪些能源是艰苦的,须要张开大气的测量试验,可是这带来的天性升高是引人瞩指标。如若大家甘愿尝试这一个预获取技术,一定会生硬进级顾客的体会。

浓厚阅读

  • Slides from a talk by Ilya Grigorik called Preconnect, prerender, prefetch
  • MDN link prefetching FAQ
  • W3C preload spec
  • Harry Roberts on DNS prefetching
  • HTML5 prefetch
  • Preload hints for webfonts

原文:Prefetching, preloading, prebrowsing

1 赞 5 收藏 评论

图片 1

本文由pc28.am发布于前端技术,转载请注明出处:详解HTML5中rel属性的prefetch预加载功效接纳,前端

上一篇:JS烟花背景效果达成形式,Tencent微云中绿遮罩指 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 详解HTML5中rel属性的prefetch预加载功效接纳,前端
    详解HTML5中rel属性的prefetch预加载功效接纳,前端
    前端质量优化 – 能源预加载 2015/11/19 · JavaScript· 预加载 原著出处: ROBINRENDLE   译文出处:bubkoo的博客(@问崖的崖)    当提到前端质量优化时,我们
  • 又不理解怎么命名class了
    又不理解怎么命名class了
    怎么样鬼,又不驾驭怎么命名class了 2015/10/25 · CSS ·class 原稿出处:结一(@结一w3cplus)    信任写css的人都会遇见下边的标题:  糟糕,怎么命名这一个
  • 在行内元素前注入一个换行,right的使用说明
    在行内元素前注入一个换行,right的使用说明
    在行内元素前注入一个换行 2016/06/28 · CSS ·行内元素 原文出处: ChrisCoyier   译文出处:众成翻译    我遇到了一个小问题,我有一个 span 在 header 中,而
  • 标签的用法,标签区别
    标签的用法,标签区别
    考虑 pre 标签的样式 2016/06/02 · CSS ·标签 原文出处: ChrisCoyier   译文出处:众成翻译    你可能正在使用 pre 标签。这是一个 HTML中非常特别的标签,它
  • 异步JavaScript的进步历程,函数简化异步代码
    异步JavaScript的进步历程,函数简化异步代码
    异步JavaScript进化史 2015/10/14 · CSS 本文由 伯乐在线 -cucr翻译,唐尤华校稿。未经许可,禁止转载! 英文出处:GergelyNemeth。欢迎加入翻译组。 async函数近在