热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从一次风趣的试验进修机能优化

从一次试验进修机能优化WebAPI之Performance接口详解下图是Performance接口的属性,供应给定页面的与时候相干的机能信息.navigation包含了页面阅读上下

从一次试验进修机能优化

Web API之Performance 接口详解

下图是Performance 接口的属性,供应给定页面的与时候相干的机能信息.
《从一次风趣的试验进修机能优化》

  • navigation 包含了页面阅读上下文的导航信息,比方大批猎取资本的重定向。

    • redirectCount示意页面加载前经由重定向次数,该接口有同源战略限定,即仅能检测同源的重定向。

    • 返回值应该是0,1,2,255中的一个。离别对应三个罗列值:
      0 : TYPE_NAVIGATE (用户经由历程通例体式格局接见页面,比方点一个链接,输入地点等)
      1 : TYPE_RELOAD (用户经由历程革新,包含JS挪用革新接口(Location.reload())等体式格局接见页面)
      2 : TYPE_BACK_FORWARD (用户经由历程阅读器历史记录接见本页面)
      255: 其他体式格局

  • memory包含了客栈运用情况信息,usedJSHeapSize示意一切被运用的js客栈内存;totalJSHeapSize示意当前js客栈内存总大小,这示意usedJSHeapSize不能大于totalJSHeapSize。

  • timing包含了页面加载时候相干的机能信息。

    • 主要的参数:

    1. navigationStart:预备加载新页面的肇端时候,平常认为是页面最初的时候.平常和fetchStart值相称,和connectEnd中心的时候用于DNS剖析,竖立TCP衔接.

    2. requestStart:返回从服务器、缓存、当地资本等,最先请求文档的时候,平常用于统计收集资本请求的时候.

    3. domLoading:返回当前网页DOM构造最先剖析时(即Document.readyState属性变成“loading”、响应的readystatechange事宜触发时)的时候,与domComplete对应,用于统计页面衬着时候.

    4. domComplete:返回当前网页DOM构造天生时候,此时页面衬着完成.

    5. DNS查询耗时 :domainLookupEnd – domainLookupStart

    6. TCP链接耗时 :connectEnd – connectStart

    7. request请求耗时 :responseEnd – responseStart

    8. 剖析 DOM 树构造的时候:domComplete – responseEnd;

    9. 平常白屏时候:responseStart – navigationStart

    10. 页面总耗时:loadEventEnd/domComplete – navigationStart

一张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。

  • performance的要领:

    • performance.now()返回当前网页自从performance.timing.navigationStart到当前时候之间的微秒数(毫秒的千分之一)。精度能够到达100万分之一秒。应用performance.now要领,能够获得某种操纵斲丧的正确时候。

    performance.mark('mark')
    performance.mark('markEnd')
    performance.measure('name', 'mark', 'markEnd')
    // 消灭指定标记
    performance.clearMarks('mark');
    // 消灭一切标记
    performance.clearMarks();

    • performance.mark()用于标记某个时候点。运用该要领参数(即标记时候点),再挪用 performance.measure(name, nameStart, nameEnd);即可测得某两个时候点之间的耗时.

    var start = performance.now();
    // 被测代码
    var end = performance.now();
    console.log('耗时:' + (end - start) + '微秒。');

    • performance.getEntries() 资本测速:该要领以数组情势,返回请求的时候统计信息(剧本文件、款式表、图片文件等等),有多少个请求,返回数组就会有多少个成员。单元是微秒(microsecond)

    // 统计款式,剧本,图片请求数和斲丧时候
    var imgResource = {
    count: 0,
    time: 0
    };
    var cssResource = {
    count: 0,
    time: 0
    };
    var scriptResource = {
    count: 0,
    time: 0
    };
    performance.getEntries().forEach(item => {
    if (item.initiatorType === 'img') {
    imgResource.count++;
    imgResource.time += item.duration
    } else if (item.initiatorType === 'link') {
    cssResource.count++;
    cssResource.time += item.duration
    } else if (item.initiatorType === 'script') {
    scriptResource.count++;
    scriptResource.time += item.duration
    }
    });

Canvas和svg

  • Canvas基于像素,供应2D绘制函数,是一种HTML元素范例,依靠于HTML,经由历程剧本绘制图形;绘制立即形式图形,合适像素处置惩罚,动态衬着和大数据量绘制.

  • SVG基于矢量,供应一系列图形元素(Rect, Path, Circle, Line …),另有完全的动画,事宜机制,能自力运用,也能够嵌入到HTML中.SVG 是一个保存在内存中模子中的保存形式图形模子,而内存中模子可经由历程从新显现的代码效果举行操纵,更合适用来做动态交互.

现实对照:Echarts和Highcharts

Echarts基于Canvas,而Highcharts基于SVG,本次试验应用10万个微博签到数据来测试两者的机能差别.

  1. 一最先在两个零丁文件中离别运用Echarts和Highcharts来绘制几百个点,发明因为收集,引入的库差别,两者时候不具有对照性.因而转而在统一页面中绘制.

  2. 将一切依靠在head中引入,离别封装两个画图函数,用ajax从长途猎取数据,在回调函数中画图而且统计时候,从而剖析机能差别.

  3. 测试代码:

Echarts函数

function renderEchart(weiboData) {
var timeStart = window.performance.now().toFixed(4);
$('.eRender span:eq(0)').html($('.eRender span:eq(0)').html() + timeStart);
var myChart = echarts.init(document.getElementById('main'));
myChart.setOption(option);
var timeEnd = window.performance.now().toFixed(4);
console.log(timeEnd - timeStart);
$('.eRender span:eq(1)').html($('.eRender span:eq(1)').html() + timeEnd);
$('.eRender span:eq(2)').html($('.eRender span:eq(2)').html() + (timeEnd - timeStart).toFixed(4) + 'ms');
}

Highcharts函数


function renderHchart(hda) {
var timeStart = window.performance.now().toFixed(4);
$('.hRender span:eq(0)').html($('.hRender span:eq(0)').html() + timeStart);
var H = Highcharts,
map = H.maps['cn/china'],
chart;
var colors = Highcharts.getOptions().colors;
new Highcharts.Map('container',params)
var timeEnd = window.performance.now().toFixed(4);
console.log(timeEnd - timeStart);
$('.hRender span:eq(1)').html($('.hRender span:eq(1)').html() + timeEnd);
$('.hRender span:eq(2)').html($('.hRender span:eq(2)').html() + (timeEnd - timeStart).toFixed(4) + 'ms');
}

4.测试效果:因为svg没法画出10万个点(阅读器会卡死),画3000点就须要7s.所以下面svg最多只画3000个点.
画100个点:《从一次风趣的试验进修机能优化》
Echarts画10万个点,highcharts画3000个点:]《从一次风趣的试验进修机能优化》
Echarts零丁画10万个点:《从一次风趣的试验进修机能优化》
highcharts零丁画3000个点:《从一次风趣的试验进修机能优化》

总结:试验效果很轻易展望,canvas一定比基于dom的svg机能好得多,而且假如运用webGL,应用显卡加快,机能会进一步提拔.然则测试中碰到许多有价值的题目,比方怎样应用js猎取页面机能信息,从而做出优化战略,怎样控制变量消除滋扰要素使得测试更具有说服力.试验中对performance以及面板的深切相识也使得我对页面全部衬着流程有了更深的熟悉.


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
author-avatar
evenstand_291
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有