Web性能分析工具调研

随着互联网时代的到来,网络用户越来越多,如何对网站进行优化来提升性能从而改善用户体验变得越来越重要。这对开发者提出了新的挑战。那么,开发者如何判断某个网站性能如何,是否需要优化?如果需要优化,网站的瓶颈在哪?需要对哪里进行优化?这时,一款优秀的Web性能分析工具则显得尤为重要。可以说Web性能分析工具是对网站进行性能优化的必备工具。目前有许多优秀的Web性能测试的工具,如WebPageTest、YSlow、HttpWatch、Page Speed、YCSB、HttpAnalyzer等。本文将主要对Web前端性能分析工具YSlow和云端的常用性能分析工具YCSB进行详细的介绍。

YSlow

YSlow是广为人知的Web页面性能分析、测试和调试工具,是由Yahoo开发的基于网页性能分析的浏览器插件。YSlow最初只支持安装在火狐浏览器的Firebug上,随着着Yahoo对YSlow的不断开发和维护,目前YSlow已经有很多版本了,可以支持FireFox、chrome、欧朋浏览器和欧朋移动版等众多浏览器。现如今,YSlow已经成为业界的评价标准之一。

YSlow的主要功能包括:

基于三种预定义的规则集,或用户自定义的规则集,为页面打分

为页面性能提升提供建议

总结页面的组件情况

展示页面统计信息

提供性能分析辅助工具

 

网站评分和优化建议

雅虎曾经针对网站速度提出了非常著名34条准则:《Best Practices for Speeding UpYour Web Site》。而现在将34条精简为更加直观的23条,并针对每一条给出从F~A的评分以及最终的总分。现在23条网站性能优化建议在YSlow的官网首页就能看到,在使用YSlow后,在控制面板里就会给你评分提示和改进建议。这使得开发者对网站页面性能进行评估变得非常方便。另外YSlow还允许用户自己选择定制优化准则集合,具有很高的灵活性。以下是Yahoo的经典23条优化准则:

1.        尽可能减少HTTP请求次数

2.        使用CDN

3.        避免空src和href标签

4.        加入Expires或Cache-Control Header

5.        使用Gzip压缩

6.        在html文件顶部放置样式表

7.        在html文件底部放置JavaScript脚本

8.        避免使用CSS表达式

9.        使用外部JavaScript和CSS外部文件

10.    减少使用DNS查找次数

11.    精简JavaScript和CSS

12.    避免重定向

13.    移除重复的脚本

14.    配置ETag

15.    缓存AJAX

16.    使用GET完成AJAX请求

17.    减少DOM元素数量

18.    避免404

19.    减少Cookie大小

20.    使用无Cookie的域

21.    避免使用滤镜

22.    不要在HTML中缩放图片

23.    使用小favicon.ico文件,并让其可缓存

利用YSlow的经典23条对百度首页进行测评,结果图1所示。左侧是根据各个准则给出的评分,点击左侧的各个标签,可以看到对该项内容进行优化的建议。通过测试百度首页可以看出,减少HTTP请求规则得分比较低。给出的建议是合并额外的JS和CSS等。


图 1 YSlow测评百度首页

组件情况

通过YSlow提供的查看页面总结的Components情况可以看出网页各个元素占用的空间大小。开发者可以根据各个元素大小,寻找可能的优化方式。

展示页面统计信息

YSlow还对页面的信息进行了统计,并以可视化的方式展示了出来,非常直观。图2是对百度首页测评的页面统计信息。


图 2YSlow测评百度首页的页面统计信息

性能分析辅助工具

YSlow还提供许多对Web前端网页进行分析的辅助工具,如JSLint、ALL JS、ALL Smush.it?、All JS Beautified、All JSMinified等众多的JS和CSS分析优化工具。为开发者优化页面提供了更方便的工具。

从YSlow提供的主要功能可以看出,YSlow需要的参数只有待测的网页网址和对网站进行评测时应用的规则集这两部分。YSlow参数较少,用起来简单,不需要太多的专业背景知识。同时,YSlow为开发者自动提供的优化建议,省去了许多开发者自己分析的工作。所以YSlow的优势在于它简单方便、实用、容易上手。

YCSB

YCSB(Yahoo!Cloud Serving Benchmark) 是雅虎开源的一款通用的性能测试工具,主要用在云端或服务器端的性能评测分析。YCSB用一个通用的负载框架来评估不同键值对存储和云存储的性能表现。


图 3 YCSB结构

图3是YCSB的机构图,可以看成是一个数据库客户端。暗色的模块是可以替换的,Workload Executor是产生应用负载的,DBInterface Layer是将特定数据库的API转为YCSB的API,用户可以自定义负载和数据库。目前YCSB自带了6种负载(workloads/目录下),其中五种如表1所示。用户可以自定义操作(read、update、insert和scan)的比例,以及选择操作目标记录的分布:Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)。


表 1workloads in core package

通过这个工具我们可以对各类NoSQL产品进行相关的性能测试。比如大家所熟知的HBase、cassandra、mongodb、redis等等。用YCSB进行测试可以知道数据库在并发写入、读取、更新时的一些指标,比如吞吐量、IO延迟等等。YCSB可以对多种不同的NoSQL进行测试,这里我们用YCSB对HBase进行测试为例来讨论它的优缺点。

YCSB与HBase自带的性能测试工具(PerformanceEvaluation)相比,好处在于:

扩展:进行性能测试的客户端不仅仅只是HBase一款产品,而且可以是HBase不同的版本。

灵活:进行性能测试的时候,可以选择进行测试的方式:read+write,read+scan等,还可以选择不同操作的频度与选取Key的方式。

监控:

进行性能测试的时候,可以实时显示测试进行的进度:

1340 sec: 751515operations; 537.74 current ops/sec; [INSERT AverageLatency(ms)=1.77]

1350 sec: 755945operations; 442.82 current ops/sec; [INSERT AverageLatency(ms)=2.18]

测试完成之后,会显示整体的测试情况:

[OVERALL],RunTime(ms), 1762019.0

[OVERALL],Throughput(ops/sec), 567.5307700995279

[INSERT],Operations, 1000000

[INSERT],AverageLatency(ms), 1.698302

[INSERT],MinLatency(ms), 0

[INSERT],MaxLatency(ms), 14048

[INSERT],95thPercentileLatency(ms), 2

[INSERT],99thPercentileLatency(ms), 3

[INSERT],Return=0, 1000000

[INSERT], 0, 29

[INSERT], 1,433925

YCSB的不足在于:

自带的workload模型还是过于简单,不提供MR的形式进行测试,所以进行测试的时候如果希望开启多线程的方式会比较麻烦。比如导入的时候开启多线程只能是启动多个导入进程,然后在不同的启动参数中指定“开始Key的值”。在进行Transaction测试的时候,只能在多台机器开启多个线程来操作。

YCSB的主要参数有负载量、操作类型以及比例、操作目标记录的分布等。YCSB的这些参数可以根据需求人工*配置,应用起来很是方便。

结论

很好的应用Web性能分析工具对于Web页面的优化至关重要。可以省去很多人工检测的劳动,使得优化事半功倍。YSlow和YCSB是目前非常主流的Web前端和云端服务器的性能优化工具。这两款工具都具有简单方便,灵活易用的特点,无论对初学者还是资深Web优化专业人士都是不错的选择。

参考文献

[1]     Cooper B F, Silberstein A, Tam E, et al.Benchmarking cloud serving systems with YCSB[C]//Proceedings of the 1st ACMsymposium on Cloud computing. ACM, 2010: 143-154.

[2]     博客http://lusongsong.com/reed/362.html

[3]     YCSB github网站https://github.com/brianfrankcooper/YCSB

[4]     yahoo!YSlow官网http://developer.yahoo.com/yslow/

[5]     开源中国博客http://my.oschina.net/fomy/blog/167659

博客http://www.cnblogs.com/gpcuster/archive/2011/08/16/2141430.html

Web性能分析工具调研,布布扣,bubuko.com

Web性能分析工具调研

上一篇:CTF中的命令执行绕过


下一篇:Cocos2d学习之路五(Box2d使用CCPhysicsSprite时编译不通过解决方法)