性能监控:window.performance

Web Performance API允许网页访问某些函数来测量网页和Web应用程序的性能。

一、介绍

window.performance可以用来监控前端页面的性能。控制台输出:

《性能监控:window.performance》

memory是JS对内存的使用情况。

navigation字段统计的是一些网页导航相关的数据,包含重定向的数量和页面进入的方式。

timing字段包含延迟相关的性能信息。

注:其中memory属性只支持chrome浏览器。

二、memory属性

memory:{
    jsHeapSizeLimit: 2190000000 // 内存大小限制
    totalJSHeapSize: 11900000   // 可使用的内存
    usedJSHeapSize: 10000000    //JS 对象占用的内存,一定小于 totalJSHeapSize
}

其中,usedJSHeapSize一定要小于totalJSHeapSize值,否则又内存泄漏的问题。

这个值在我们多次操作之后,一直不变,而且一直是个0很多,看上去很整数。(哪有那么好的运气)

其实,这个值只是一个量化的数字,防止给攻击者获取到的。我们可以在chrome浏览器右键属性中增加–enable-precise-memory-info。

《性能监控:window.performance》

此时在控制台上看到的内存就是真实值了。

三、navigation

navigation:{
    redirectCount:0 // 如果有重定向的话,页面通过几次重定向跳转而来
    type:0 //页面来源类型:
    // 0 即 TYPE_NAVIGATENEXT 正常进入的页面(非刷新、非重定向等)
    // 1 即 TYPE_RELOAD 通过 window.location.reload() 刷新的页面
    // 2 即 TYPE_BACK_FORWARD 通过浏览器的前进后退按钮进入的页面(历史记录)
    // 255 即 TYPE_UNDEFINED 非以上方式进入的页面
}

该对象表示在当前给定浏览上下文中网页导航的类型。

四、timing

timing:{
    connectEnd:1494406626724 // HTTP(TCP) 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等 // 注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间 // 注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过
    connectStart:1494406626724 // HTTP(TCP) 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等 // 注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间 
    domComplete:1494406628815 // DOM 树解析完成,且资源也准备就绪的时间,Document.readyState 变为 complete,并将抛出 readystatechange 相关事件
    domContentLoadedEventEnd:1494406627789 // DOM 解析完成后,网页内资源加载完成的时间(如 JS 脚本加载执行完毕)
    domContentLoadedEventStart:1494406627789 // DOM 解析完成后,网页内资源加载开始的时间 // 在 DOMContentLoaded 事件抛出前发生
    domInteractive:1494406627789 // 完成解析 DOM 树的时间,Document.readyState 变为 interactive,并将抛出 readystatechange 相关事件 // 注意只是 DOM 树解析完成,这时候并没有开始加载网页内的资源
    domLoading:1494406627313 // 开始解析渲染 DOM 树的时间,此时 Document.readyState 变为 loading,并将抛出 readystatechange 相关事件
    domainLookupEnd:1494406626724 // DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等
    domainLookupStart:1494406626724 // DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等
    fetchStart:1494406626724 // 浏览器准备好使用 HTTP 请求抓取文档的时间,这发生在检查本地缓存之前
    loadEventEnd:1494406628824 // load 事件的回调函数执行完毕的时间
    loadEventStart:1494406628816 // load 事件发送给文档,也即 load 回调函数开始执行的时间 // 注意如果没有绑定 load 事件,值为 0
    navigationStart:1494406626724 // 在同一个浏览器上下文中,前一个网页(与当前页面不一定同域)unload 的时间戳,如果无前一个网页 unload ,则与 fetchStart 值相等
    redirectEnd:0 // 最后一个 HTTP 重定向完成时的时间。有跳转且是同域名内部的重定向才算,否则值为 0
    redirectStart:0 // 第一个 HTTP 重定向发生时的时间。有跳转且是同域名内的重定向才算,否则值为 0
    requestStart:1494406626757 // HTTP 请求读取真实文档开始的时间(完成建立连接),包括从本地读取缓存 // 连接错误重连时,这里显示的也是新建立连接的时间
    responseEnd:1494406627304 // HTTP 响应全部接收完成的时间(获取到最后一个字节),包括从本地读取缓存
    responseStart:1494406627301 // HTTP 开始接收响应的时间(获取到第一个字节),包括从本地读取缓存
    secureConnectionStart:0 // HTTPS 连接开始的时间,如果不是安全连接,则值为 0
    unloadEventEnd:1494406627304 // 和 unloadEventStart 相对应,返回前一个网页 unload 事件绑定的回调函数执行完毕的时间戳 
    unloadEventStart:1494406627304 // 前一个网页(与当前页面同域)unload 的时间戳,如果无前一个网页 unload 或者前一个网页与当前页面不同域,则值为 0
}

给张图详细地看下timing字段:

《性能监控:window.performance》

这些属性记录着页面的性能信息,通过简单的计算,我们就可以获得页面的一些性能指标:

;
(function() {
    'use strict';

    window.addEventListener('load',getTiming)

    function getTiming() {
        var time = performance.timing;
        var timingObj = {};
        var loadTime = (time.loadEventEnd - time.loadEventStart) / 1000;

        if (loadTime < 0) {
            setTimeout(function() {
                getTiming();
            },200);
            return;
        }

        timingObj['重定向时间'] = (time.redirectEnd - time.redirectStart);
        timingObj['DNS解析时间'] = (time.domainLookupEnd - time.domainLookupStart);
        timingObj['TCP完成握手时间'] = (time.connectEnd - time.connectStart);
        timingObj['HTTP请求响应完成时间'] = (time.responseEnd - time.requestStart);
        timingObj['DOM开始加载前所花费时间'] = (time.responseEnd - time.navigationStart);
        timingObj['DOM加载完成时间'] = (time.domComplete - time.domLoading);
        timingObj['DOM结构解析完成时间'] = (time.domInteractive - time.domLoading);
        timingObj['脚本加载时间'] = (time.domContentLoadedEventEnd - time.domContentLoadedEventStart);
        timingObj['onload事件时间'] = (time.loadEventEnd - time.loadEventStart);
        timingObj['页面完全加载时间'] = (timingObj['重定向时间'] + timingObj['DNS解析时间'] + timingObj['TCP完成握手时间'] + timingObj['HTTP请求响应完成时间'] + timingObj['DOM结构解析完成时间'] + timingObj['DOM加载完成时间']);

        for (var item in timingObj) {
            console.log(item + ":" + timingObj[item] + '毫秒(ms)');
        }
    }
})();

增加此段代码,我们就可以得到有关页面性能的详细信息了。

《性能监控:window.performance》

五、兼容性

再来看下兼容性,可以支持到IE9+。

《性能监控:window.performance》

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


问题背景 最近小伙伴提了一个希望提高后台下拉列表可操作性的需求,原因是下拉列表选项过多,每次下拉选择比较费时费力且容易出错,硬着头皮啃了啃前端知识,网上搜寻了一些下拉列表实现的资料,这里总结一下。 P
// n位随机数生成 function randomNum(n) { let sString = &quot;&quot;; let strings = &quot;abcdefghijklmnopq
HTML是HyperText Markup Language的简称,中文名称:超文本标记语言,它是一种用于创建网页的 标准标记语言
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
JavaScript 是脚本语言,是一种解释性脚本语言(代码不进行预编译)
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 一名开发者或设计师通常可以在一秒内指出优秀的设计,但对于糟糕的设计只需最多半
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 Excel是我们办公中常用的工具 ,它几乎能为我们处理大部分数据,友好的交互
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/8-tips-for-an-awesome-sign
本文由葡萄城技术团队于博客园翻译并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 如果我们自己编写从URL中分析和提取元素的代码,那么有可能会比较痛苦
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/what-is-deno-and-will-it-r
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/4-reasons-to-use-sass-in-y
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/vuejs-3-0-0-beta-features-
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/sessionstorage-and-localst
一直以来,JavaScript使用数组和对象来定义和存放结构化数据, 在这篇文章中,我们将一起深挖另一种对象Map的一切,我们将会去了解它是什么、如何遍历、都包括什么属性和方法以及优缺点是什么。
由于CSS的出现,现在的网站风格已经与它们很早之前的样子有了很大的不同。CSS的出现为原本平平无奇的网页注入了活力。这也是网站的用户体验得到进一步进化的原因。这可能就是当今几乎所有的网站或多或少都在使
自苹果推出了iPhone应用商店以来,App成为了我们生活中不可或缺的一部分,而对于实体业务也是如此,现在各行业都在推出自己的App,但有没有人想过这样一种场景,如果自己的潜在客户还没有安装你的App
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/10-top-chrome-extensions-f
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://blog.bitsrc.io/do-your-buttons-lead-or-mi
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前段时间在开发【葡萄城社区】公众号时有一个功能是需要用网页授权认证地址生成二
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 HTML5的发展改变了互联网技术趋势,前端热度依旧不减,所以对于应用开发人员