前阵子在查个问题,我必须要取得浏览网页时所需花费的时间作为搞清问题的参考依据。一个网页的呈现,简单的讲,在浏览器发出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
标签:网页速度浏览器相关IECapt