文档章节

web性能优化之:prefetch和prerender.

duozuo2006
 duozuo2006
发布于 2016/12/11 19:00
字数 609
阅读 16
收藏 0

本文从预加载的角度介绍如何优化页面载入和渲染的性能,在展开内容之前先了解一下浏览器显示页面的过程:首先是DNS解析,然后建立TCP连接,接着下载HTML内容以及资源文件,最后才是整个页面的渲染。如图:

图片来源:https://docs.Google.com/presentation/d/18zlAdKAxnc51y_kj-6sWLmnjl6TLnaru_WH0LJTjP-o/present?slide=id.gc03305a_0106

预加载和缓存是两个概念,缓存通常使用304响应状态码来标识,参考文章:怎样理解HTTP状态码?。

这四个阶段必须是串行的,任何一步的延迟都会最终影响到页面加载时间。但浏览器在这方面已经做了很多优化,例如它会猜测你将要打开的页面,并预先解析DNS甚至直接下载它们。但浏览器猜测的能力是有限的,作为Web开发者我们可以通过dns-prefetch,subresource,prefetch,prerender等指令来帮助浏览器优化性能。

dns-prefetch

dns-prefetch可以指示浏览器去预先解析DNS域名。这样可以减少将要打开页面的延迟,

<head>  <link rel='dns-prefetch' href='http://www.open-open.com/lib/view/example.com'>  ...</head>

 

对于重定向也是有用的,比如对于:host1.com/resource > 301 > host2.com/resource 也可以设置dns-prefetch: host2.com来省去最后一个页面访问的DNS延迟。

prefetch

prefetch用来初始化对后续导航中资源的获取。prefetch指定的资源获取优先级是最低的。

<head>  <link rel="prefetch" href="http://www.open-open.com/lib/view/checkout.html">  ...</head>

 

subresource

subresource用来标识出重要的资源,浏览器会在当前访问页面时立即下载它们

<head>  <link rel="subresource" href="http://www.open-open.com/lib/view/critical/app.js">  ...</head>

 

subresource的语义是当前页面的子资源,浏览器会立即下载它们。 subresource的优先级高于prefetch。参见: http://stackoverflow.com/questions/29475854/what-is-link-rel-subresource-used-for

prerender

合适的适合,你甚至可以用prerender来让浏览器在后台事先渲染好整个页面,这样它的打开速度将会是0秒!

<head>  <link rel="prerender" href="http://www.open-open.com/lib/view/checkout.html">  ...</head>

 

因为要渲染整个页面,所以它需要的所有资源也会被全部下载。如果里面的JS需要在页面显示时运行,可以通过页面可见性API来实现。当然只有GET才是可以预先渲染的,预渲染POST当然是不安全的。

本文转载自:

共有 人打赏支持
duozuo2006
粉丝 0
博文 13
码字总数 8728
作品 0
北京
私信 提问
移动Web加速技术月报第2期

作者 | Brilliant Open Web 团队breezet、shdong 编辑 | 尾尾 为推进Web技术的发展,Brilliant Open Web 团队特推出每月一期的《移动Web加速技术月报》,该月报将整理较流行的移动Web加速技术...

BrilliantOpenWeb
2017/11/09
0
0
ASP.NET 2.0中Page事件的执行顺序

Page 执行中将按照如下顺序激活事件: Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComplete Page.PreRender Page.PreRenderComplete 如果页面从令一个页面继......

晨曦之光
2012/03/09
40
0
Django查询优化之select_related和prefetch_related

一、select_related查询优化 select_related通过多表join关联查询,一次性获得所有数据,通过降低数据库查询次数来提升性能,但关联表不能太多,因为join操作本来就比较消耗性能。本文通过D...

daibaiyang119
2017/10/30
0
0
前端开发攻城师不可忽视的五个HTML5新特性

HTML5已经火了一段时间了,相信作为web相关开发工程师,肯定或多或少的了解和尝试过一些HTML5的特性和编程。还记得以前我们介绍过的HTML5新标签。 作为未来前端开发技术的潮流和风向标,HTM...

gbin1
2013/07/03
6.1K
17
prerender-SPA程序的SEO优化策略

随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single Page Application已经为大家所熟悉了。如今常见的S...

zting科技
2017/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache用户认证,域名跳转

11月15日任务 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志 11.18 Apache用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑......

zgxlinux
37分钟前
1
0
idea 添加 VUE 的语法支持和开发

《一》VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting -> Edit -> Inspections -> html 3,...

文文1
55分钟前
1
0
【NLP】【七】fasttext源码解析

【一】关于fasttext fasttext是Facebook开源的一个工具包,用于词向量训练和文本分类。该工具包使用C++11编写,全部使用C++11 STL(这里主要是thread库),不依赖任何第三方库。具体使用方法...

muqiusangyang
今天
3
0
防止Tweak

什么是tweak? 英文意思为捏, 拧,扭,稍稍调整(机器、系统等)。 依据维基百科的定义,tweak指的是对电子系统进行轻微调整来增强其功能的工具;在ios中tweak特指那些能够增强其它可执行程...

HeroHY
今天
3
0
linux中常用标识---不定期更新

LINUX常用标识符: 1 & && | || &: 表示进程在后台运行 例如 redis-server & 不是所有后台运行都是& 比如es ./bin/elasticsearch -d es后台运行&&: 第一个命令执行成功后 才执行后面的命令...

geek土拨鼠
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部