[转]基于phantomJS实现web性能监控
1、web性能监控背景描述
上期分享的《Web性能监控自动化探索之路–初识WebPageTest》从依赖webpagetest的角度给出了做性能日常检查的方案,但由于依赖结构相对复杂我们需要给出更简单的解决方案。,测试同学没有快速投入的主要原因也是语言和维护成本相对比较大。但解决方案是多种多样的:)。那么我们再看下这个需求的本质:针对内外网环境需要定期对站点进行yslow和page speed检查,以保证在持续开发过程中保证质量。
对比webpagetest,我们再反思下手里的资源和特点:
1、对于固定的HTML结构,我们不需要多浏览器支持亦可以得到yslow和page speed等结论
2、webkit是开源的:)
3、pagespeed和yslow都是有开源sdk的。
那么我们的工作就变得很简单了,打包webkit实现一个不需要展示界面的程序(当然需要界面信息可以随时从UI线程里读取)生成需要的数据文件,并生成报表即可。流程简化如下:
1、通过QT或者phantomJS等webkit打包工具获取HTTP请求数据流HAR文件(这里采用phantomJS)
2、通过HAR文件来生成请求瀑布图、yslow报告和page speed报告()
3、通过保存HAR文件来生成站点的趋势
4、通过修改hosts文件来控制内网测试环境
2、PhantomJS介绍

PhantomJS(http://phantomjs.org/)是支持JavaScript API的无界面、运行在服务端的webkit环境。它通过JavaScript和CoffeeScript控制webkit的各个模块,比如CSS Selector,JSON,Canvas、SVG和HTTP网络等等。它非常适合:
1、用来做服务端的网站测试,包括Qunit,Jasmin等等。
2、屏幕截图抓取
3、网页DOM操作
4、网络情况监控

它提供了很多的examples,其中netsniff.js就是用于监控网络请求并生成HAR文件的。

3、HAR文件(HTTP Archive Specification)
HAR(HTTP Archive Specification),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON。这个格式的出现可以使HTTP监测工具以一种通用的格式导出所收集的数据,这些数据可以被其他支持HAR的HTTP分析工具(包括Firebug,httpwatch,Fiddler等)所使用,来分析网站的性能瓶颈。目前HAR规范最新版本为HAR 1.2。HAR文件必须是UTF-8编码,有无BOM无所谓。
HAR数据结构:
一个HAR文件就是一个JSON对象,如下:
{“log”: {
“version” : “1.2″,
“creator” : {},
“browser” : {},
“pages”: [],
“entries”: [],
“comment”: “”
}
}
- version [string] – 版本,默认为1.1。
- creator [object] – 创建HAR文件的程序名称和版本信息。
- browser [object, 可选] – 浏览器的名称和版本信息。
- pages [array, 可选] – 页面列表,如果应用不支持按照page分组,可以省去此字段。
- entries [array] – 所有HTTP请求的列表。
- comment [string, 可选] (new in 1.2) – 注释。
注:每个页面对应一个<page>对象,每个HTTP请求对应一个<entry>对象。如果HTTP的监测分析工具不能把请求按照page分组,那么<pages>为空。
4、Page Speed SDK和YSLOW
首先我们现在google的Page Speed站点上下载安装SDK。http://code.google.com/p/page-speed/wiki/DownloadPageSpeed?tm=2。

然后把通过phontomJS获取的har文件进行解析。

这边已经可以通过命令行获取到具体的分数和建议。
同理我们也可以获取yslow的分数。

5、HAR Viewer
HAR Viewer(http://www.softwareishard.com/har/viewer/)是基于Javascript的一个很强大的HAR分析工具,它可以将HAR文件以瀑布流和饼图等形式进行展示。源代码在这里:http://code.google.com/p/harviewer/。

这些图片结合HAR的产生和pagespeed的评分建议是不是很酷!
6、后续的事儿
把站点的HAR文件用数据库的形式存储,建立趋势对比的文档。把自助工具建立成站点。
参考URL:
1、http://phontomjs.org
2、http://httparchive.org/about.php#harfile
3、http://weizhifeng.wordpress.com/2011/03/26/http-archive-specification-chinese/
4、http://www.igvita.com/2012/08/28/web-performance-power-tool-http-archive-har/
5、http://code.google.com/p/page-speed/wiki/DownloadPageSpeed?tm=2
6、http://groups.google.com/group/http-archive-specification
[转]基于phantomJS实现web性能监控的更多相关文章
- [转]Web性能监控自动化探索之路–初识WebPageTest
本文转自:http://www.webryan.net/2013/01/use-webpagetest-to-analyze-web-performance/ 无论是从Velocity 2012还是在 ...
- web性能监控与分析
注:原文为:andyguo: <web性能监控与分析> 性能测试需要使用不同的工具,结合系统日志,监控服务器.应用等方面的多项指标.以下阐述监控指标.监控工具.瓶颈分析. 服务端监控指标 ...
- Sentry Web 性能监控 - Metrics
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry Web 性能监控 - Trends
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- [原创]HTML5 web性能监控策略
web性能重要指标--时长 通常在监控前端页面性能的时候,我们会需要获取到很多的时间戳,比如用户按下回车的时候开始计时,但这个时候,我们统计的js代码并没有加载过来,也无法读取到相关的信息.在HTML ...
- 性能监控系统 | 从0到1 搭建Web性能监控系统
工具介绍 1. Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理.常见支持的「G ...
- 实用|从0到1 搭建Web性能监控系统
工具介绍 1. Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理. 常见支持的「 ...
- Sentry Web 性能监控 - Web Vitals
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇
背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...
随机推荐
- fedora找开ftpd服务器并以root登陆
工作原因需要在federal中弄个vsftpd再用root去登陆(我知道这样不太安全) 确认系统的版本 [root@localhost ~]# uname -a Linux localhost.loc ...
- linux c编程:进程控制(四)进程关系
每一个进程除了有一个进程ID外,还属于一个进程组. 进程组是一个或多个进程的集合,通常情况下,他们是在同一作业中结合起来的,同一进程组的个进程接受来自同一终端的各种信号. 每一个进程组有一个唯一的进 ...
- JVM性能优化, Part 2 ―― 编译器
作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson ...
- python 的for else语句
for中间不是break出来的,是正常循环完跳出循环的会执行else内的语句 while else语句也是如此 这个以前的常见语言没有,特此记录
- linux shell 中数组使用方法介绍
linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- linux下tomcat的配置及项目的部署流程
Java的安装配置 1. 在/etc/profile文件中配置相应的信息(如下) export JAVA_HOME=/usr/java/jdk1.6.0_20 export JRE_HOME=/usr ...
- 每天一个Linux命令(27)gzip命令
zip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名. (1)用法: 用法: gzip [选项参数][-s <压缩字尾字符 ...
- shell 脚本后台运行知识
1. bash while01.py & 把脚本放在后台执行 2. ctl + c 停止执行前台执行中的脚本(不能停止在后台运行中的脚本) 3. ctl + z 暂停执行前台 ...
- unigui中TUniDBEdit的OnEndDrag问题
非常奇怪,unigui中TUniDBEdit未发布OnEndDrag属性,包括其子类:TUniDBNumberEdit.TUniDBFormattedNumberEdit.而其他数据感知组件都有OnE ...
- Hive split分割后获取最后一段
----------------------------------------- 如果只看解决方法,直接看最后... ---------------------------------------- ...