简介

performance是html5的新特性之一,通过它,页面的开发者们可以非常精确的统计到自己页面的表现情况,从而有针对性的进行优化,提升用户体验。

下面是小姐姐对performance相关API的学习总结,一起上车吧~

performance.timing

返回一个PerformanceTiming对象,用来获取完整的页面加载信息。

是时候祭出这张图了:

我们会比较关注的几个时间段及其耗时的计算方法如下:

  • DNS解析:timing.domainLookupEnd - timing.domainLookupStart
  • 建立连接:timing.connectEnd - timing.connectStart
  • 发送请求:timing.responseStart - timing.requestStart
  • 接收请求:timing.responseEnd - timing.responseStart
  • 解析DOM树:timing.domInteractive - timing.domLoading
  • 页面加载完成:timing.domContentLoadedEventStart - timing.domInteractive
  • DOMContentLoaded事件耗时:
    timing.domContentLoadedEventEnd - timing.domContentLoadedEventStart
  • DOM加载完成:timing.domComplete - timing.domContentLoadedEventEnd
  • DOMLoad事件耗时:timing.loadEventEnd - timing.loadEventStart

performance.now

返回一个DOMHighResTimeStamp对象,获取从timing.navigationStart开始到调用该方法的时间,精确到千分之五毫秒(5微秒)。

下面是该方法的使用场景之一:通过计算代码块的起始位置以及结束位置performance.now()的差值,来获取一个比较精确的代码执行时间。

看代码:

var startTime, endTime;

startTime = window.performance.now();

doSomething();

endTime = window.performance.now();

console.log(endTime - startTime);

资源性能数据

performance提供若干API允许我们对页面中加载的资源进行性能分析。

performance.getEntries

获取一组当前页面已经加载的资源PerformanceEntry对象。接收一个可选的参数options进行过滤,options支持的属性有nameentryTypeinitiatorType

var entries = window.performance.getEntries();

返回值如下图所示:

  • name,根据entryType不同,该值有不同含义。entryTyperesource时,name表示资源的路径。
  • entryType,取值有:resourcemarkmeasure等,详情戳这里
  • initiatorType,初始化该资源的资源类型:

    - 初始化资源是一个`Element`时,取值为节点的`localName`,通过`element.localName`获取。
    - 初始化资源是一个`css`文件时,取值为`css`。
    - 初始化资源是一个`XMLHttpRequest`时,取值为`xmlhttprequest`。
    - 初始化资源是一个`PerformanceNavigationTiming`对象时,取值为空字符串。
  • startTime,一个DOMHighResTimeStamp对象,开始获取该资源的时间。
  • duration,一个DOMHighResTimeStamp对象,获取该资源消耗时长。

performance.getEntriesByName

根据参数nametype获取一组当前页面已经加载的资源数据。name的取值对应到资源数据中的name字段,type取值对应到资源数据中的entryType字段。

var entries = window.performance.getEntriesByName(name, type);

performance.getEntriesByType

根据参数type获取一组当前页面已经加载的资源数据。type取值对应到资源数据中的entryType字段。

var entries = window.performance.getEntriesByType(type);

performance.setResourceTimingBufferSize

设置当前页面可缓存的最大资源数据个数,entryTyperesource的资源数据个数。超出时,清空所有entryTyperesource的资源数据。

window.performance.setResourceTimingBufferSize(maxSize);

performance.onresourcetimingbufferfull

entryTyperesource的资源数量超出设置值的时候会触发该事件。

performance.clearResourceTimings

移除缓存中所有entryTyperesource的资源数据。

自定义计时接口

performance.mark

创建一个DOMHighResTimeStamp保存在资源缓存数据中,可通过performance.getEntries()等相关接口获取。

  • entryType为字符串mark 
  • name为创建时设置的值
  • startTime为调用mark时的时间
  • duration为0,因为mark没有时长
window.performance.mark(name)

performance.clearMarks

移除缓存中所有entryTypemark的资源数据。

performance.measure
计算两个mark之间的时长,创建一个DOMHighResTimeStamp保存在资源缓存数据中,可通过performance.getEntries()等相关接口获取。

  • entryType为字符串measure 
  • name为创建时设置的值
  • startTime为调用measure时的时间
  • duration为两个mark之间的时长
window.performance.measure(name, startMark, endMark);

performance.clearMeasures

移除缓存中所有entryTypemeasure的资源数据。

performance.navigation

返回一个PerformanceNavigation类型的只读对象:

  • type,进入页面的方式:

    - `TYPE_NAVIGATENEXT(0)`,通过点击链接,书签,在浏览器地址栏输入地址,或者通过脚本跳转
    - `TYPE_RELOAD(1)`,通过点击页面内的刷新按钮,或者通过`Location.reload()`方法
    - `TYPE_BACK_FORWARD(2)`,通过点击页面内的前进后退按钮
    - `TYPE_RESERVED(255)`,其他方式
  • redirectCount ,表示到达此页面之前经过多少次重定向。

performance.toJSON

返回一个包含performance对象所有属性的JSON对象。

THE END

以上就是全部内容啦,有意见或者建议欢迎积极留言哦,笔芯~

HTML5 Performance的更多相关文章

  1. 2018年html5入门到精通教程电子书百度云盘下载共22本

    名称 查看 <HTML5启动和运行>(HTML5.Up.and.Running)扫描版[PDF] 下载 <Pro HTML5 Performance>(Pro HTML5 Pe ...

  2. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  3. 使用Javascript监控前端相关数据

    项目开发完成外发后,没有一个监控系统,我们很难了解到发布出去的代码在用户机器上执行是否正确,所以需要建立前端代码性能相关的监控系统. 所以我们需要做以下的一些模块: 一.收集脚本执行错误 functi ...

  4. Web性能优化系列

    web性能优化之重要,这里并不打算赘述.本系列课程将带领大家认识.熟悉.深刻体会并且懂得如果去为不同的站点做性能优化 同时,本系列将还会穿插浏览器兼容性相关问题的解决方案,因为在我看来,兼容性同样属于 ...

  5. HTML5的学习--performance获取加载时间的工具

    前段时间因为项目需要获取页面加载的时间,就去看了下HTML5中的performane. 可以用其获得页面详细的加载时间. 关于performance的详细内容可以查看 http://www.cnblo ...

  6. HTML5的学习--performance

    HTML5提供的performance接口精确的告诉我们当访问一个网站页面时当前网页每个处理阶段的精确时间(timestamp),以方便我们进行前端分析. 它是浏览器的直接实现,比在网页中用js设置D ...

  7. HTML5 学习总结(一)——HTML5概要与新增标签

    一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸 ...

  8. 基于HTML5实现3D热图Heatmap应用

    Heatmap热图通过众多数据点信息,汇聚成直观可视化颜色效果,热图已广泛被应用于气象预报.医疗成像.机房温度监控等行业,甚至应用于竞技体育领域的数据分析. http://www.hightopo.c ...

  9. HTML5 学习笔记(一)——HTML5概要与新增标签

    目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2 ...

随机推荐

  1. 【洛谷】P1447 能量采集

    此题虽为紫,但其实在水 能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一 ...

  2. Linux下安装Apollo (Quick Start)

    一.运行时环境 1.CentOS7 2.JDK1.8+ (安装JDK可参考 https://www.cnblogs.com/sportsky/p/15973713.html) 3.MySQL 5.6. ...

  3. Kendo UI Grid 使用总结

    Kendo UI Grid控件的功能强大,这里将常用的一些功能总结一下. Kendo UI Grid 固定列 在使用Gird控件显示数据时,如果数据列过多,会出现横向滚动条,很多情况下,我们希望某些列 ...

  4. java IO流体系--通识篇

    1.I/O流是什么 Java的I/O流是实现编程语言的输入/输出的基础能力,操作的对象有外部设备.存储设备.网络连接等等,是所有服务器端的编程语言都应该具备的基础能力. I = Input(输入),输 ...

  5. 【笔记】封神榜游戏设计VR

    一.添加怪物(这个教程的鬼兵我可以用)1.设置怪物出生点.2.创建一个新脚本-CreateMonster,写好脚本之后放到3个传送门上.3.然后添加完成后,给三个添加Audio Source组件4.可 ...

  6. php 23种设计模型 - 原型模式

    原型模式(Prototype) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式是实现 ...

  7. CSAPP CH7链接的应用:静动态库制作与神奇的库打桩机制

    目录 创建静态库 创建动态库 库打桩机制 编译时打桩: 链接时打桩 运行时打桩 运行时打桩的printf与malloc循环调用debug 使用LD_PRELOAD对任意可执行程序调用运行时打桩 总结 ...

  8. Fiddler——抓取https接口配置(web,安卓,ios)

    作为一名合格的测试怎么能不会抓包呢.   抓包适用场景:   测试某个功能时,出现了bug,这时我们便需要抓包看一下这个bug到底是前端的还是服务端的: bug的精准指向,能加速bug得以解决.   ...

  9. 【Java分享客栈】Java程序员为争一口气熬夜硬刚CSS实现掘金首页

    前言 如果我做不了最厉害的Java工程师,那我就做Java工程师中最厉害的前端工程师. 前段时间,我默默给自己又喂了这碗心灵鸡汤-- 我不是很厉害的Java工程师,哪怕我已经工作八年,我依然觉得自己和 ...

  10. libpcap -学习1

    1.今天学到的最重要一点就是指定是否打开混杂模式(Promiscuous Mode),0表示非混杂模式,任何其他值表示混合模式.如果要打开混杂模式,那么网卡必须也要打开混杂模式,可以使用如下的命令打开 ...