- 浏览: 448393 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ubuntu的疯狂:
推荐一份完整的教程:http://blog.ddlisting ...
Emberjs学习 -
ptz19:
请问,如果把合并前的文件,不要dest 目标目录来。如: js ...
gulp下静态资源的合并、压缩、MD5后缀 -
zhouzq1008:
楼主,还有个问题,<a href="" ...
gulp下静态资源的合并、压缩、MD5后缀 -
zhouzq1008:
感谢楼主,用到了您的代码, 但现在好像有改动 否则会报错:修改 ...
gulp下静态资源的合并、压缩、MD5后缀 -
denverj:
感谢分享~
Emberjs学习
以下内容原文来自:
http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
http://www.stevesouders.com/blog/2014/11/25/serious-confusion-with-resource-timing/
按照自己的理解,做了整理。
一、基本定义:
1. 示例图:
2. 各个时间段的获取:
3. 使用 getEntriesByType(“resource”) 而不是 getEntries().
getEntries 理论上可以有4种不同类型的返回: “resource”, “navigation”, “mark”, and “measure”。
尽管在当前浏览器的实现中,getEntriesByType(“resource”) 与 getEntries 是暂时一致的。
但为了安全起见,使用前者总是明确的。
4.注意secureConnectionStart不同取值:
1)undefined: IE浏览器下,该值不可用。见:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx
2)0: HTTP协议下;
3)有值(时间戳): HTTPS协议下。(与页面本身是否采用HTTPS协议无关。)
因此,在使用该属性时候,记得先检查是否有值。例如:
二、跨域的问题
受同源策略影响,跨域资源获取到的时间点,通常为0.包括以下属性:
解决的方式是:
资源响应头,添加 Timing-Allow-Origin 的配置。例如:Timing-Allow-Origin:*
例如:
http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
所以,测量时间时候,最好是加个判断:
三、耗时为零是怎么回事?
1. 由于浏览器会缓存域名的解析,所以, domainLookupStart - domainLookupEnd 很有可能为0.
2. TCP链接是可以重用的(通常服务器和浏览器之间,可以同时保留6左右的活跃链接,具体视情况而定),
所以,connectEnd – connectStart 也有可能为0。同样的,适用于 connectEnd – secureConnectionStart = 0 的情况。
四、304响应的问题
Chrome v36还有IE10/11,当一个跨域资源(已经设置Timing-Allow-Origin)被下载后,如果重新刷新页面,由于浏览器缓存策略,这些资源有可能会返回304响应。
但是,这一次的304响应,浏览器无法正确获得缓存的Timing-Allow-Origin头部设置,从而把它认作“非法”的请求,导致出现前面提到的跨域限制,各个时间点时间为0的情况。
显然,这就导影响了测量值的准确性,得到的时延结果,有可能更高(把304视为200)或更低(把304忽略掉)。
五、最后,duration = responseEnd - redirectStart 得到的结果,有可能不是正确的。为什么?
通过浏览器测试发现,实际情况是: duration = responseEnd - redirectStart + 资源阻塞时间。
所谓 资源阻塞时间,这里指的是,由于浏览器的并发请求是有限的,通常是6~12个,在浏览器开始解析标签(如IMG),并发起请求开始,计时就已经开始了。
而在并发之外,处于等待状态的资源,得到的duration就需要比前面的资源,多出了这个阻塞(排队)的时间。从而,这个duration,就不能很好的测量浏览器到服务器直接的请求了。
示例:http://stevesouders.com/tests/rt-blocking.php 在这个页面中,会发现后面的图片加载,比前面的图片加载,要多出1~2s的时间,而这个时间,就是资源在浏览器排队阻塞的时间了。
六:可以顺便关注一下这个统计脚本:boomerang
https://github.com/lognormal/boomerang
前身是Yahoo出的,它有个插件:https://github.com/lognormal/boomerang/blob/master/plugins/restiming.js,
就基本帮我们完成一些时间点的收集功能。
附录:
测试例子:http://stevesouders.com/tests/tao.php
原文:http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
http://www.stevesouders.com/blog/2014/11/25/serious-confusion-with-resource-timing/
http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
http://www.stevesouders.com/blog/2014/11/25/serious-confusion-with-resource-timing/
按照自己的理解,做了整理。
一、基本定义:
1. 示例图:
2. 各个时间段的获取:
// Navigation Timing var t = performance.timing, pageloadtime = t.loadEventStart - t.navigationStart, dns = t.domainLookupEnd - t.domainLookupStart, tcp = t.connectEnd - t.connectStart, ttfb = t.responseStart - t.navigationStart; // Resource Timing var r0 = performance.getEntriesByType("resource")[0], loadtime = r0.duration, dns = r0.domainLookupEnd - r0.domainLookupStart, tcp = r0.connectEnd - r0.connectStart, ttfb = r0.responseStart - r0.startTime;
3. 使用 getEntriesByType(“resource”) 而不是 getEntries().
getEntries 理论上可以有4种不同类型的返回: “resource”, “navigation”, “mark”, and “measure”。
尽管在当前浏览器的实现中,getEntriesByType(“resource”) 与 getEntries 是暂时一致的。
但为了安全起见,使用前者总是明确的。
4.注意secureConnectionStart不同取值:
1)undefined: IE浏览器下,该值不可用。见:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx
2)0: HTTP协议下;
3)有值(时间戳): HTTPS协议下。(与页面本身是否采用HTTPS协议无关。)
因此,在使用该属性时候,记得先检查是否有值。例如:
var r0 = performance.getEntriesByType("resource")[0]; if ( r0.secureConnectionStart ) { var ssl = r0.connectEnd - r0.secureConnectionStart; }
二、跨域的问题
受同源策略影响,跨域资源获取到的时间点,通常为0.包括以下属性:
redirectStart redirectEnd domainLookupStart domainLookupEnd connectStart connectEnd secureConnectionStart requestStart responseStart
解决的方式是:
资源响应头,添加 Timing-Allow-Origin 的配置。例如:Timing-Allow-Origin:*
例如:
http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
所以,测量时间时候,最好是加个判断:
// Resource Timing var r0 = performance.getEntriesByType("resource")[0], loadtime = r0.duration; if ( r0.requestStart ) { var dns = r0.domainLookupEnd - r0.domainLookupStart, tcp = r0.connectEnd - r0.connectStart, ttfb = r0.responseStart - r0.startTime; } if ( r0.secureConnectionStart ) { var ssl = r0.connectEnd - r0.secureConnectionStart; }
三、耗时为零是怎么回事?
1. 由于浏览器会缓存域名的解析,所以, domainLookupStart - domainLookupEnd 很有可能为0.
2. TCP链接是可以重用的(通常服务器和浏览器之间,可以同时保留6左右的活跃链接,具体视情况而定),
所以,connectEnd – connectStart 也有可能为0。同样的,适用于 connectEnd – secureConnectionStart = 0 的情况。
四、304响应的问题
Chrome v36还有IE10/11,当一个跨域资源(已经设置Timing-Allow-Origin)被下载后,如果重新刷新页面,由于浏览器缓存策略,这些资源有可能会返回304响应。
但是,这一次的304响应,浏览器无法正确获得缓存的Timing-Allow-Origin头部设置,从而把它认作“非法”的请求,导致出现前面提到的跨域限制,各个时间点时间为0的情况。
显然,这就导影响了测量值的准确性,得到的时延结果,有可能更高(把304视为200)或更低(把304忽略掉)。
五、最后,duration = responseEnd - redirectStart 得到的结果,有可能不是正确的。为什么?
通过浏览器测试发现,实际情况是: duration = responseEnd - redirectStart + 资源阻塞时间。
所谓 资源阻塞时间,这里指的是,由于浏览器的并发请求是有限的,通常是6~12个,在浏览器开始解析标签(如IMG),并发起请求开始,计时就已经开始了。
而在并发之外,处于等待状态的资源,得到的duration就需要比前面的资源,多出了这个阻塞(排队)的时间。从而,这个duration,就不能很好的测量浏览器到服务器直接的请求了。
示例:http://stevesouders.com/tests/rt-blocking.php 在这个页面中,会发现后面的图片加载,比前面的图片加载,要多出1~2s的时间,而这个时间,就是资源在浏览器排队阻塞的时间了。
六:可以顺便关注一下这个统计脚本:boomerang
https://github.com/lognormal/boomerang
前身是Yahoo出的,它有个插件:https://github.com/lognormal/boomerang/blob/master/plugins/restiming.js,
就基本帮我们完成一些时间点的收集功能。
附录:
测试例子:http://stevesouders.com/tests/tao.php
原文:http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
http://www.stevesouders.com/blog/2014/11/25/serious-confusion-with-resource-timing/
发表评论
-
webpack简单打包PC网站前端资源
2016-02-23 14:30 1691:arrow: 1. 纯前端的打包输出,比较有局限 2 ... -
grunt构建基于seajs的网站实现
2015-06-16 16:49 1127Gruntfile.js module.exports ... -
js平滑滚动回到顶部
2015-06-10 11:42 4013优先使用 requestAnimationFrame实现。 实 ... -
fis-amd 的使用与修改
2015-05-26 16:14 3955https://github.com/fex-team/fis ... -
scrollMagic 视差与滚动动画GSAP
2015-05-19 18:14 4440scrollMagic(https://github.com/ ... -
skrollr-视差滚动动画插件
2015-05-19 14:18 1738skrollr ( https://github.com/Pr ... -
stellar插件的使用
2015-05-18 17:30 1783<!DOCTYPE html> < ... -
icon font VS svg font
2015-05-14 15:21 1211关于字体图标和SVG图标,CSS TRICK网站有较好的说明。 ... -
gulp下静态资源的合并、压缩、MD5后缀
2015-05-05 15:48 22631var gulp = require('gulp'); ... -
DOMContentLoaded VS onload VS onreadystatechange
2015-04-30 14:50 70081. DOMContentLoaded 在页面html、scr ... -
简单的css3全屏滚动
2015-04-27 16:41 1450<!DOCTYPE html> <ht ... -
jquery插件treetable 的使用
2015-04-20 16:12 11997插件的文档写得不是很好,为了能弄出异步加载的功能,小折腾了一番 ... -
sublime 侧边栏字体大小修改
2015-04-16 10:46 3834【转载自:http://jekhy.com ... -
移动端的“点透”问题
2015-04-15 14:13 1659移动端的“点透”问题,这篇博文有较好的说明: http://w ... -
scheme缺少,ie的bug
2015-04-01 17:34 532在页面上定位一个资源(JS/CSS/image),通常的url ... -
大整数相加
2015-03-26 22:18 936function repeatStr(ch, n){ ... -
getBoundingClientRect 跨浏览器实现
2015-03-18 18:30 1105<head> <script ... -
window.name 跨域
2015-03-18 17:29 898window.name跨域的基础是:iframe页面在其url ... -
window.name 跨域
2015-03-18 17:27 1window.name跨域的基础是:iframe页面在其ur ... -
HTML History API
2015-03-13 18:05 1131// 替换当前浏览器history的最后一项记录。 hi ...
相关推荐
Oracle的集成式企业级学习平台为企业提供课程设计、排程、注册管理、审批、进度追踪、学员反馈统计与分析等功能,使培训管理成为闭环式人力资源管理的一部分,与绩效管理和员工发展紧密结合。这个平台有助于快速、...
它通过收集和存储关于服务器内部事件和等待事件的数据,帮助管理员深入了解SQL语句的执行情况和资源消耗。Performance Schema包含了一系列的表,例如: 1. setup_instruments:定义了可被追踪的事件类型,如SQL语句...
原始统计分为几种类型,如计数器型、计量器型、计时器型、计数器组型、常规分布型和加权分布型。这些统计项用于计算关键指标,以反映网络的性能和负荷。 网络性能的KPI主要包括接续顺畅度、通话流畅度、掉话率、...
perf提供了一种简单的方式来收集和分析各种性能数据,包括CPU周期、指令执行、缓存命中率等,以及用户空间和内核空间的函数调用计时。它可以通过采样技术来监控进程,线程,甚至是特定的指令,以了解程序运行时的...
2. **使用操作数和执行步数来测量程序的时间需求**:这是一种量化程序运行时间的方法,通过统计基本操作的数量来估算程序的整体运行时间。 #### 二、渐进符号描述复杂性 - **Ο(大O符号)**:表示最坏情况下的...
节点应用程序度量标准提供了以下内置数据收集源: 资源描述环境机器和运行时环境信息中央处理器进程和系统CPU 记忆进程和系统内存使用GC Node / V8垃圾回收统计事件循环事件循环延迟信息循环事件循环计时指标功能分
"前端项目-benchmark.zip"正是这样一款专为前端开发者设计的基准测试库,它提供了高分辨率的计时器,能够帮助我们得到统计显著的结果,从而做出更明智的优化决策。 首先,我们来了解一下什么是基准测试。基准测试是...
6. **计时器(Timer)**: 使用`System.Timers.Timer`或`System.Threading.Timer`可以定时检查并记录流量数据,比如每秒或每分钟统计一次。 7. **性能计数器(Performance Counter)**: .NET框架提供了`System....
SIPP(Simple IP Performance Protocol)是一个强大的、开源的SIP(Session Initiation Protocol)负载生成器和基准测试工具。它被广泛用于测试SIP服务器、代理和客户端的性能、稳定性和容量。SIP是一种互联网协议,...
可以使用`Date.now()`或`performance.now()`来获取当前时间戳,并将其与上一次按键的时间戳做差值,得到两次按键之间的间隔。累积这些间隔,就能得到总打字时间。 计算打字速度通常是将字符数量除以总时间,单位...
**5.4 系统性能和性能分析 (Chapter 26: System Performance and Profiling)** - **性能监控**: 使用`top`, `vmstat`等命令监控系统性能。 - **性能分析**: 使用`gprof`, `perf`等工具进行性能分析。 - **调优**: ...