一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时。而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒。

performance.timing属性介绍

图片说明如下:

属性说明:

  • navigationStart:浏览器处理当前网页的启动时间
  • fetchStart:浏览器发起http请求读取文档的毫秒时间戳。
  • domainLookupStart:域名查询开始时的时间戳。
  • domainLookupEnd:域名查询结束时的时间戳。
  • connectStart:http请求开始向服务器发送的时间戳。
  • connectEnd:浏览器与服务器连接建立(握手和认证过程结束)的毫秒时间戳。
  • requestStart:浏览器向服务器发出http请求时的时间戳。或者开始读取本地缓存时。
  • responseStart:浏览器从服务器(或读取本地缓存)收到第一个字节时的时间戳。
  • responseEnd:浏览器从服务器收到最后一个字节时的毫秒时间戳。
  • domLoading:浏览器开始解析网页DOM结构的时间。
  • domInteractive:网页dom树创建完成,开始加载内嵌资源的时间。
  • domContentLoadedEventStart:网页DOMContentLoaded事件发生时的时间戳。
  • domContentLoadedEventEnd:网页所有需要执行的脚本执行完成时的时间,domReady的时间。
  • domComplete:网页dom结构生成时的时间戳。
  • loadEventStart:当前网页load事件的回调函数开始执行的时间戳。
  • loadEventEnd:当前网页load事件的回调函数结束运行时的时间戳。

性能数据分析

1.DNS寻址时间:t.domainLookupEnd - t.domainLookupStart。

优化方法:检查页面是否添加了DNS预解析代码。

<link rel="dns-prefetch" href="//haitao.nosdn1.127.net">

是否合理利用域名发散与域名收敛的策略。

2.TCP连接耗时:t.connectEnd - t.connectStart。

3 首包时间: t.responseStart - t.navigationStart。

优化方法:是否加cdn,数据可否静态化等。

4.request请求耗时:t.responseEnd - t.requestStart。

优化方法:返回内容是否已经压缩过,静态资源是否打包好等。

5.白屏时间。

白屏时间是最影响用户体验的,时间越久,用户等待就越久。

6.解析DOM树结构的时间:t.domComplete - t.domLoading。

优化方法:检查dom节点是否过多,dom是否嵌套过深。

7.页面加载完成的时间:t.loadEventEnd - t.fetchStart。

优化方法:考虑延迟加载,懒加载,部分加载,减少首屏渲染时间。

方法

performance.getEntries():每个资源请求的时间数据。

performance.now() 计算网页从performance.timing.navigationStart到当前时间的毫秒数。

精确计算某个操作,或某个方法执行的耗时。

var start = performance.now();
dosomething();
var end = performance.now();
var time = end - start;
console.log('耗时' + time + '毫秒。');

或者console.time('aa'),console.timeEnd('aa')计算。

performance.mark()给相应的视点做标记。结合performance.measure()使用也可以算出各个时间段的耗时。

执行下列代码可以查看页面加载各个阶段的耗时。

function getTimes(){
var t = performance.timing;
var timing = {
domainLookupTime: t.domainLookupEnd - t.domainLookupStart,
TCPConnectTime: t.connectEnd - t.connectStart,
ttfb: t.responseStart - t.navigationStart,
requestTime: t.responseEnd - t.requestStart,
waitTime: t.domLoading - t.navigationStart,
renderDomTime: t.domComplete - t.domLoading,
loadPageTime: t.loadEventEnd - t.fetchStart
}
console.log(timing);
}
getTimes();
参考资料:

http://javascript.ruanyifeng.com/bom/performance.html

https://developer.mozilla.org/zh-CN/docs/Web/API/Performance

https://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute

http://www.alloyteam.com/2015/09/explore-performance/

利用performance属性查看网页性能的更多相关文章

  1. 使用performance进行网页性能监控

    由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...

  2. 【译文】使用webpack提高网页性能优化

    这篇文章原文来自https://developers.google.com/web/fundamentals/performance/webpack/. 说是译文其实更像是笔者做的笔记,如有错误之处请 ...

  3. Performance Monitor1:开始性能监控

    Performance Monitor是Windows内置的一个可视化监控工具,能够在OS级别上实时记录系统资源的使用情况,通过收集和存储日志数据,在SQL Server发生异常时,能够还原系统当时的 ...

  4. 利用DIV+CSS制作网页过程中常用的基本概念及标签使

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  5. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数据挖掘的过程中,一个关键步骤就是网页源代码的获取.但是出于各种原因 ...

  6. 利用DIV+CSS制作网页过程中常用的基本概念及标签使用细节

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  7. http网页性能最佳实践

    你愿意为打开一个网页等待多长时间?我一秒也不愿意等.但是事实上大多数网站在响应速度方面都让人失望.现在越来越多的人开始建立自己的网站,博客,你的网页响应速度如何呢?在这篇文章中我们来介绍一下提高网页性 ...

  8. HTTP/2 服务器推送(Server Push)教程(HTTP/2 协议的主要目的是提高网页性能,配置Nginx和Apache)

    HTTP/2 协议的主要目的是提高网页性能. 头信息(header)原来是直接传输文本,现在是压缩后传输.原来是同一个 TCP 连接里面,上一个回应(response)发送完了,服务器才能发送下一个, ...

  9. 利用@media screen实现网页布局的自适应

    利用@media screen实现网页布局的自适应 优点:无需插件和手机主题,对移动设备友好,能够适应各种窗口大小.只需在CSS中添加@media screen属性,根据浏览器宽度判断并输出不同的长宽 ...

随机推荐

  1. 腾讯Tinker初入门总结

  2. 《Hey程序员 你适合加入创业公司吗?》再补充

    笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...

  3. ios app响应background,foreground 事件实现

    1 通过AppDelegate 实现 App进入后台事件方法 - (void)applicationDidEnterBackground:(UIApplication *)application AP ...

  4. mysql动态行转列

    测试数据 DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `id` ) NOT NULL AUTO_INCREMENT, `class` ) ...

  5. POST和GET区别

    1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...

  6. Linux系统管理命令之用户组管理

    涉及的配置文件 /etc/group /etc/gshadow /etc/gshadow- 可用于还原 不同系统的备份文件名称不同:name-或name.old 命令: 添加用户组groupadd 组 ...

  7. bootstrap简单的过一遍

    注:.xxxx 表示类(class=xxxx) <h1>到<h6>均可使用.另外还提供了.h1到.h6的class .lead可以让段落突出显示 <small>  ...

  8. PCI在linux系统中注册与注销示例

    1. pci_driver结构struct pci_driver {    struct list_head node;    const char *name;    const struct pc ...

  9. CoCreateInstance调用COM接口伪流程

    在编写组件程序时,经常会使用CoCreateInstance直接取COM组件的接口,非常方便,那CoCreateInstance到底干了些什么事呢?1.CoCreateInstance取COM组件的接 ...

  10. js生成[n,m]的随机数

    一.预备知识 Math.ceil();  //向上取整. Math.floor();  //向下取整. Math.round();  //四舍五入. Math.random();  //0.0 ~ 1 ...