为了得到脚本运行的精确耗时,需要一个高精度时间戳,传统的做法是使用Date对象的getTime方法,其不足之处在于:

1) getTime方法及Date对象的其他方法只能精确到毫秒级别,无法得到更小的时间精度;

2) getTime方法只能获取脚本运行过程中的时间进度,无法知道一些后台事件的时间进度,比如浏览器用了多少时间从服务器加载网页。

为了解决这两个不足之处,ES 5引入高精度时间戳——Performance API。Performance是浏览器对象,精度可以达到1毫秒的千分之一。即1秒的百万分之一,这不仅能衡量程序的细微差别,提高程序的运行速度,还可以获取后台事件的时间进度。

Performance API用于精确度量、控制、增强浏览器的性能表现,使测量网站性能达到前所未有的精度。目前,所有主要浏览器都已经支持performance对象,,包括Chrome 20+、Firefox 15+、IE 10+、Opera 15+。

1、performance.timing对象

performance对象的timing属性指向一个对象,它包含了各种与浏览器性能有关的时间数据,提供浏览器处理网页的各个阶段的耗时。

performance.timing对象的属性:

属性

含义

navigationStart

当前浏览器窗口的前一个网页关闭,发生unload事件时的Unix毫秒时间戳。如果没有前一个网页,则等于fetchStart属性。

unloadEventStart

如果前一个网页与当前网页属于同一个域名,则返回前一个网页的unload事件发生时的Unix毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为0。

unloadEventEnd

如果前一个网页与当前网页属于同一个域名,则返回前一个网页unload事件的回调函数结束时的Unix毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为0。

redirectStart

返回第一个HTTP跳转开始时的Unix毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为0。

redirectEnd

返回最后一个HTTP跳转结束时(即跳转回应的最后一个字节接受完成时)的Unix毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为0。

fetchStart

返回浏览器准备使用HTTP请求读取文档时的Unix毫秒时间戳。该事件在网页查询本地缓存之前发生。

domainLookupStart

返回域名查询开始时的Unix毫秒时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于fetchStart属性的值。

domainLookupEnd

返回域名查询结束时的Unix毫秒时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于fetchStart属性的值。

connectStart

返回HTTP请求开始向服务器发送时的Unix毫秒时间戳。如果使用持久连接(persistent connection),则返回值等同于fetchStart属性的值。

connectEnd

返回浏览器与服务器之间的连接建立时的Unix毫秒时间戳。如果建立的是持久连接,则返回值等同于fetchStart属性的值。连接建立指的是所有握手和认证过程全部结束。

secureConnectionStart

返回浏览器与服务器开始安全链接的握手时的Unix毫秒时间戳。如果当前网页不要求安全连接,则返回0。

requestStart

返回浏览器向服务器发出HTTP请求时(或开始读取本地缓存时)的Unix毫秒时间戳。

responseStart

返回浏览器从服务器收到(或从本地缓存读取)第一个字节时的Unix毫秒时间戳。

responseEnd

返回浏览器从服务器收到(或从本地缓存读取)最后一个字节时(如果在此之前HTTP连接已经关闭,则返回关闭时)的Unix毫秒时间戳。

domLoading

返回当前网页DOM结构开始解析时(即Document.readyState属性变为loading、相应的readystatechange事件触发时)的Unix毫秒时间戳。

domInteractive

返回当前网页DOM结构结束解析、开始加载内嵌资源时(即Document.readyState属性变为interactive、相应的readystatechange事件触发时)的Unix毫秒时间戳。

domContentLoadedEventStart

返回当前网页DOMContentLoaded事件发生时(即DOM结构解析完毕、所有脚本开始运行时)的Unix毫秒时间戳。

domContentLoadedEventEnd

返回当前网页所有需要执行的脚本执行完成时的Unix毫秒时间戳。

domComplete

返回当前网页DOM结构生成时(即Document.readyState属性变为complete,以及相应的readystatechange事件发生时)的Unix毫秒时间戳。

loadEventStart

返回当前网页load事件的回调函数开始时的Unix毫秒时间戳。如果该事件还没有发生,返回0。

loadEventEnd

返回当前网页load事件的回调函数运行结束时的Unix毫秒时间戳。如果该事件还没有发生,返回0。

2、performance.now()

performance.now()方法返回当前网页从performance.timing.navigationStart到当前时间之间的微秒数,其精度可达100万分之一秒。

performance.now()近似等于Date.now(),但前者返回的是毫秒,后者返回的是微秒,后者的精度比前者高1000倍。

3、performance.mark()

performance.mark方法用于为相应的视点做标记。

performance.clearMarks方法用于清除标记,如果不加参数,则清除所有标记。

4、performance.getEntries()

浏览器获取网页时,会对网页中每一个对象,如js文件、css文件、图片文件等,发出一个HTTP请求。performance.getEntries方法以数组形式,返回这些请求的时间统计信息。

由于performance.getEntries()方法与浏览器处理网页的过程相关,所以只能在浏览器中使用。

5、performance.navigation对象

除时间信息,performance还可以提供用户行为信息,主要存放在performance.navigation对象上。

performance.navigation对象有两个属性:

1) performance.navigation.type

返回一个整数值,表示网页的加载来源,可能有以下4种:

① 0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATENEXT。

② 1:网页通过重新加载按钮或location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。

③ 2:网页通过前进或后退按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。

④ 255:任何其他来源的加载,相当于常数performance.navigation.TYPE_UNDEFINED。

2) performance.navigation.redirectCount

该属性表示当前网页经过了多少次重定向跳转。

浅谈浏览器对象——Performance API相关推荐

  1. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  2. java对象头markword_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  3. 浅谈浏览器的兼容性(从HTML、CSS、JS、PC端、移动端等方面)

    浅谈浏览器的兼容性) 前言 一.HTML部分 a.html5的新标签 b.img的alt属性 c.ul标签内外边距问题 二.css部分 a.css的hack问题:主要针对IE的不同版本,不同的浏览器的 ...

  4. java 对象之间转换_浅谈java对象之间相互转化的多种方式

    浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...

  5. 浅谈浏览器多进程与JS线程

    引言 一直对浏览器的进程.线程的运行一无所知,经过一次的刷刷刷相关的博客之后,对其有了初步的了解,是时候该总结一波了. 进程.线程之间的关系 一个进程有一个或多个线程,线程之间共同完成进程分配下来的任 ...

  6. 浅谈Flink对象重用(object reuse)

    前言 今天是大年初一,祝各位虎年大吉大利~ 近期受工作变动影响,博客又荒废了许久.今天难得有空,就前段时间内部技术分享里提到的一个小知识点来写几笔. 对象重用(object reuse)在Flink文 ...

  7. 浅谈浏览器标准模式与怪异模式、文档类型

    在网页设计制作过程中,新人往往会遇到一个问题,就是浏览器的不兼容问题.这种状况在大学学习过程中会经常遇到,但一直也没有得到很好的解决,今天有机会仔细研究了一下,这是有关浏览器标准模式与怪异模式之间的问 ...

  8. [转]浅谈浏览器插件检测 和自定义协议的支持

    前一阵子一直在折腾浏览器的插件检测和自定义协议的支持. 经过种种痛苦的折腾,算是对这一领域有了点浅显的认知.特此记录一下 一.背景知识 自定义协议:常用的协议有 http:// https://  f ...

  9. 【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性

    判断IE版本主要的是获取两个属性,a.当前浏览器名称,b.当前浏览器版本,为此不得不了解navigator对象. 先贴代码 1 window.onload = function() { 2 var b ...

最新文章

  1. OCP考试052考试,新的考题还有答案整理-23题
  2. 模拟实现EXT2文件系统
  3. flask小demo-数据查询
  4. [剑指offer]面试题第[58-2]题[JAVA][左旋转字符串][拼接]
  5. 昆虫繁殖(信息学奥赛一本通-T1312)
  6. 双网卡centos7 iptables防火墙与/etc/rc.d/rc.local开机运行
  7. JAVA读写Properties属性文件
  8. 【Java万字笔记】重要基础知识点整理与汇总
  9. 面试题猜想:1+1等于几?
  10. 一款熊猫游戏java_狂热的熊猫_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  11. 想学编程做程序员,是学前端好还是学后台好?
  12. C++实践之华氏温度转摄氏温度
  13. flowable modeler6.5.0集成spring boot
  14. 爬取王者荣耀皮肤-点券领取
  15. 简述Android操作系统和IOS系统的区别;
  16. B-Spline样条曲线及其性质
  17. 获取Android手机设备的IMSI / IMEI 信息
  18. 用计算机唱歌弹奏china,新目标英语专题练习:句型转换(附答案)
  19. node-opcua的使用 --- [2] 添加对象和变量
  20. Oracle查询用户权限角色(dba_sys_privs)

热门文章

  1. 关于人工智能算法应用于二级交易市场的设想(BUFF-CSGO)
  2. 解决Could NOT find Boost (missing: log filesystem) (found version “1.76.0“)
  3. c语言二进制转换算法栈,用C语言顺序栈实现十进制和二进制的转换
  4. (Spring+SpringMVC+MyBatis)SSM三大框架整合教程
  5. java对图片的转码和解码 实用
  6. 缓解电脑卡顿、释放内存的几种方法:
  7. 简述什么是反射以及反射的使用
  8. win7 网络打印机 未授予用户在此计算机上的请求登录类型,Win7共享打印机登录失败:未授予用户在此计算机上的请求登陆类型 解决方法...
  9. 如何通过媒体营销来打造成功的产品?
  10. 【基础详解】手磕实现 CNN卷积神经网络!