Link prefetching原理及性能测试

背景:

Link Prefetching  是 HTML 5的一个标准, 最早是由Mozilla 发布的一个互联网标准草案,link prefetching 现在是 W3C和WHATWG关于HTML 5中的一部分。网页可以嵌入 prefetching 标记,当浏览器加载完当前页面即结束加载网页,在浏览器闲置的时候会触发prefetching 标记的link,浏览器会在后台静默prefeching指定的documents, 并存储在cache中。
当用户访问到prefetched  documents时, cache中的内容会迅速被使用,加速网页展现。

触发Prefetch 语法:

<link rel="prefetch" href="http://www.cmcm.com"> prefetch cmcm </link>

HTTP link 语法:

Link: </images/big.jpeg>; rel=prefetch

HTML meta tag:   具体格式制定在 RFC 5988 Section 5

<meta http-equiv="Link" content="</images/big.jpeg>; rel=prefetch">

浏览器如何Prefetching & Web Developer Prefetching时机:

前面提到过浏览器会在闲置的时机进行prefetching,Firefox在Mosilla1.2中使用nsIWebProgressListener API,我们可以注册顶层的nsIWebProgress 对象,通过这个我们可以接收到document start & stop 通知,我们可以取上次stop的document和下次document start 的近视闲置值作为一段时间间隔. 当onLoad 触发处理顶层document
时基本会触发上一次document stop通知, 这是我们开始prefetch 请求时机。 如果一个subframe 包含prefetching 标记,浏览器prefetching 不会立即开始而是直到top-most frame 及其所有的子frame 完成加载才会被触发。

prefetching 是否适合你的站点取决于yourself.下面有几个建议:

(1).当一些列的页面只是slideshow,加载前后1-3个页面(前提是这些页面并不是大页面)

(2).在整个网站至始至终预加载大多数图片

(3).prefetching 你网站的搜索结果页

下面我们一起来看一下我们困惑的场景:

1.当用户点击一个正在Prefetching的link 浏览器是如何做处理的?

当用户点击或者初始化页面加载, link prefetching 会停止并且所有的prefetch的操作会被丢弃。如果已经prefetch        document 是下载的一部分,那这部分document会被存储在cache中提供给服务器发送一个“Accept-Ranges:bytes"请     求报头使用。这个请求报头会被webservers在触发静态内容生成。当用户实时访问一个已经prefetched document,保
  留部分 document 会被使用 HTTP byte-range 请求提取。

2.当用户在后台下载时,link prefetching 会抢带宽吗?

yes and no. 如果你使用Mozilla浏览器下载, link prefetching 会被delayed直到后台所有下载完成。举例来说:你打  开几个tab加载网页包含prefetching标记,Mozilla会等待所有tab的页面加载完成后才会记性prefetch 请求。当你使用其  他  应用程序使用带宽,那么 prefetch会和其他应用程序竞争。这是个问题浏览器会有待改进,这里我们自己浏览器也  会进  行相应改进,比如在网络闲置情况下才进行prefetch。

使用prefetch的限制与开关:

1. 只有http,https才能使用prefetch, ftp协议不支持prefetch。

2. 只有html的 link标签支持 prefetch , <a></a> 等其他标签不支持。

3. 你可以通过js代码关闭prefetch

user_pref("network.prefetch", false);

但是有个问题是目前虽然提供这个选项,但是大多数浏览器对这个选项支持是有问题的,换句话说即使开启这个选项,也有可能prefetching。

4.测试你的浏览器是否支持prefetching Test Prefetching

Link Prefetching 性能测试

测试环境:

小米2:

CM Browser

Android 4.1.1系统

site/page load time enable Prefetching none prefetching improve(%)
www.cmcm.com 6367 9470 65%
www.taobao.com 871 1112 87%
08-03 17:18:41.299: E/Timer(20970): pageStarted   http://www.cmcm.com/
08-03 17:18:41.399: E/Timer(20970): pageFinished  http://www.cmcm.com/
08-03 17:18:41.419: E/Timer(20970): pageStarted   http://www.cmcm.com/en-us/
08-03 17:18:47.675: E/Timer(20970): pageFinished  http://www.cmcm.com/en-us/

6367

08-03 17:20:07.631: E/Timer(21417): pageStarted   http://www.cmcm.com/
08-03 17:20:08.862: E/Timer(21417): pageFinished  http://www.cmcm.com/
08-03 17:20:08.882: E/Timer(21417): pageStarted   http://www.cmcm.com/en-us/
08-03 17:20:17.371: E/Timer(21417): pageFinished  http://www.cmcm.com/en-us/

9740
-----------------------------------------------------------------------------------------------
08-03 20:57:55.765: E/Timer(26875): pageStarted   http://www.taobao.com/
08-03 20:57:55.805: E/Timer(26875): pageStarted   http://m.taobao.com/?sprefer=sypc00
08-03 20:57:56.877: E/Timer(26875): pageFinished  http://m.taobao.com/?sprefer=sypc00

1112

08-03 21:00:45.817: E/Timer(27666): pageStarted   http://www.taobao.com/
08-03 21:00:45.867: E/Timer(27666): pageStarted   http://m.taobao.com/?sprefer=sypc00
08-03 21:00:46.688: E/Timer(27666): pageFinished  http://m.taobao.com/?sprefer=sypc00

871

通过我们自己的浏览器测试开启prefetching可以提高显著提高页面的加载速度。

转载请说明出处, 谢谢!  欢迎共同探讨.

http://blog.csdn.net/typename/article/details/38358765  powered  by miechal zhao.

Link prefetching原理及性能测试,布布扣,bubuko.com

时间: 2025-01-03 17:42:55

Link prefetching原理及性能测试的相关文章

dancing link 学习资源导航+心得

dancing link简直是求解数独的神器,NOIP2009最后一题靶形数独,DFS 各种改变搜索顺序 都没法过,最后还是用了卡时过得.用dancing link写,秒杀所有数据,总时间才400ms不到..(虽然还不是很清楚为什么会快). 一开始还是先看这个blog,图文都非常清晰 http://www.cnblogs.com/grenet/p/3145800.html 上文解释了dancing link的原理,可以用来解决精度覆盖问题,但是求解数独问题还需要一步转化. 见博文: http:/

关于在链路聚合下做smart,monitor link的转发测试

这次又要开始瞎折腾了.没事找事了.毕竟我还是很无聊的: 这个实验主要要涉及到以下几个方面: 1.gvrp的应用: 2.Smart Link与Monitor Link的配置: 3.链路聚合: 先复习一波基本知识: GVRP: GVRP(GARP VLAN Registration Protocol) GARP VLAN注册协议 GARP(Generic Attribute Registration Protocol 通用属性注册协议 可以让交换机之间能够相互交换VLAN配置信息,动态创建和管理VL

性能测试培训思路

定义: 是指在某个特定的硬件.软件.网络环境下通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 含:执行效率,资源占用,稳定性,安全性(压力测试是安全测试的一种),兼容性(class文件能不能放到兼容性平台上,如程序和浏览器内核能不能弄到一起去) loadrunner 工作原理 --来源于性能测试面试问题 性能测试实施步骤 loadrunner的脚本工作 性能测试的目的 验证改进的性能效果,需要和以前的测试结果进行比对: 新的业务上线,验证新系统能够满足系统

性能测试学习第五天_loadrunner概述

1.为什么要进行性能测试(性能测试贯穿于软件生命周期) The failure of a mission-critical application can be costly. Assure performance and functionality under real-world conditions. Locate potential problems before your customers do . Reduce development time and infrastructure

MySQL语法执行工作原理

目录 [TOC] 一.MySQL语法执行工作原理 客户端请求由Nginx等负载均衡服务器转交给Tomcat,Tomcat从MySQL中捞取数据,如果请求的数据在MySQL缓存中,那么MySQL会将缓存中捞取到的数据返回给客户端,如果缓存中没有请求的数据,那么MySQL会通过解析器解析SQL语法是否有问题(用户权限问题),在SQL语法没有问题的情况下,将SQL转交给优化器,看SQL是否通过索引等来进行查询,再通过存储引擎在磁盘中捞取数据. 详细流程如下,对于IE-->TOMCAT-->MySQL

关于dns-prefetch的详细资料

最近在看别的网站的源码,看到了一个新鲜东西(大多数网站都没有使用的一个东西----dns-prefetch)百度,阿里巴巴,淘宝,天猫,谷歌都使用了这个东西,如下: 为什么这些巨头公司会使用这个呢?我就搜了很多资料,其中有一篇介绍了它的底层原理: DNS优化的原理和方法 这篇文章介绍的非常好.主要内容为: DNS 实现域名到IP的映射.通过域名访问站点,每次请求都要做DNS解析.目前每次DNS解析,通常在200ms以下.针对DNS解析耗时问题,一些浏览器通过DNS Prefetch 来提高访问的

[转]预加载资源研究

原文: http://www.otakustay.com/prefetch-resource/ 什么是预加载 所谓预加载,就是通过一定的编程方法,使浏览器在空间的时候,在后台通过HTTP请求访问某些资源.当用户在一段时间后真正使用这些资源的时候,相比一个完整的(返回200)的请求,可以更快地获得这些资源(返回304或者直接命中浏览器缓存). 预加载在部分情况下有着十分重要的意义,特别是当确定某些资源用户在短时间内会使用,如分页列表的上一页和下一页.以及一些常用的LOGO之类的图片等. 预加载资源

[转载]你可能不知道的5个功能强大的 HTML5 API —— html5系列

HTML5 新增了许多重要的特性,像 video.audio 和 canvas 等等,这些特性使得能够很容易的网页中包含多媒体内容,而不需要任何的插件或者 API.而其它的新元素,例如 section.article.header 和 nav 等则是用来丰富网页内容.另外还有很多强大的 JavaScript API,下面这5个 HTML5 API 你可能不知道,通过今天这篇文章可以了解一下. Fullscreen API 这个 HTML5 全屏 API 让 Web 开发者可以通过编程控制页面的全

前端性能优化 - 资源预加载

转帖: https://css-tricks.com/prefetching-preloading-prebrowsing 当提到前端性能优化时,我们首先会联想到文件的合并.压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标. 资源预加载是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到. 引用 Patrick Hamann 的解释: 预加载是浏览器对将来可能被使用资源的一种暗示,一些资源可