使用powershll和IECapt取得网页浏览速度

添加评论 2010年7月15日

前阵子在查个问题,我必须要取得浏览网页时所需花费的时间作为搞清问题的参考依据。一个网页的呈现,简单的讲,在浏览器发出request后,逐一由网站取得html、css、javascript、图档等等。接者,浏览器会做解析、处理、执行、呈现。

先撇除使用者端因使用不同的浏览器、版本,造成网页呈现速度不同的这个因素(当然还要排除网路问题)。一般来讲,网站主机端的软硬体效能,以及html、css、javascript也深深影响网页最后需要多少时间才能呈现…

以上详细的过程,和相关技术,讲起来简单,其实又是另一门很深的功夫和学问。建议可以参考下面两份资料:

Yahoo - YSlow

Google - Page Speed

因此,取得浏览网页时所需花费的时间,必须要能尽量符合人们使用浏览器观看网页时的状况。而不能使用wget这类的方式来测试单独取得html的速度。思考了很久,最后还是使用 powershell 和 IECapt。

简单的说明一下作法…先提 IECapt,他是一个在指令列(command-line)下执行的小工具程式。是透过IE浏览器去截取特定的网页画面,并存成图档。也因此,使用IECapt 同等于使用IE去浏览网页。

接者,就只是很单纯的利用 powershll 去启动IECapt “浏览”网页,并计算每次浏览网页时时间。也就是计算启动起来,直到结束之间的时间差。

不过,在做长期监控时需要考量一点。就是每次测试时,无法确定在测试的当下,被测试的主机状态如何?特别是下列两种状况。因此需要设定 time out 时间,避免测试时因下列状况卡住:

•被测试的主机,当下因各种问题,造成反应异常缓慢。

当为此情况时,测试结果为time out 时间。

•被测试的主机,当下已经无法提供服务(如,如法连线)。

当为此情况时,测试结果为0。

以下,就是测试速度的代码:

#避免留有之前测试所产生的图档

if (Test-Path webservet_test.jpg){

remove-item $pwd\$testcaptfile -force

}

#产生shell,准备开始测试

$WshShell = New-Object -ComObject WScript.Shell

$timestep_start= $(Get-Date)

#避免因测试当下有问题问题导致执行太久,所以设定time out为 150秒

$theprocess= $WshShell.Exec("cmd /c $pwd\IECapt.exe --url=http://host.testing.com.tw/ --max-wait=150000 --out=$pwd\$testcaptfile")

$watching= get-process -id $theprocess.ProcessID

$watching.waitforexit()

$timestep_end= $(Get-Date)

#避免被测试的主机当下无法提供服务

#因此,利用判断图档是否存在来确定本次测试的结果为何

if (Test-Path $testcaptfile){

$spendtime=New-TimeSpan $timestep_start $timestep_end

$spendtime=$spendtime.TotalSeconds

}

else{

#表示被测试主机无法提供服务

$spendtime=0

}

附注:IECapt有时会发生不明异常,而中断。这点,目前我还没比较好的解决方案……

文章来源:http://kingfff.blogspot.com/2010/07/powershlliecapt.html

  1. 2010年7月15日 at 14:30 | #1
    cundun

    好在微软官网会定期的发布更新补丁。

  1. 还没有 trackbacks
订阅评论