« VB HTML取得時間比較 WebClient,WebBrowser,IE | トップページ | MySQL Insertが遅い! ので実験してみた »

2015年2月20日 (金)

VB WebBrowser HTML取得時間 IEバージョン差比較

半年以上前にVisualBasicでWebBrowserクラスを用いてWebページから情報を取得するプログラムをいくつか制作していました。同じページをInternetExplorer(以降IE)とVBフォーム内のWebBrowser両方で表示させ見比べながら,どこのボタンを押すのかなどを探りつつ作業を進めていくのですが,何故だが複数の特定ページでWebBrowser側の表示や挙動がおかしい。結局,原因が分からないままそのプログラムは後で検証しようと棚上げにしていました。

その後,偶然ネット徘徊の情報でWebBrowserは内部的にはIEが動作しており,しかもバージョンがかなり古い「IE7」であるとのことを知り,合点がいくと納得しました。該当のWebサイトは昨年4月のWindowsXPサポート終了に合わせてIEのサポートがIE8以降に変更されていました。WebBrowserのIEバージョンを変更して近々棚上げプログラムの制作再開を予定しています。

で,1つ疑問が湧きました。「IEのバージョンが新しい方が高速なはずだ!(根拠不明)」。ならばバージョンの違いでHTMLを読み込む速度がどの程度異なるのか是非知りたい,と。

と言うことで早速,前回の「VB HTML取得時間比較 WebClient,WebBrowser,IE」のプログラムコードをほぼそのまま使用し検証してみました。

前回は文字羅列のHTMLで100KByteと10MBteyのファイルを使用しました。半角の英文字(A~Z)を300桁×容量に合う行数としていました。今回は更に桁数が100桁,200桁のものも準備しました。
また,例えば10MBのファイルだと300桁×34997行とかになりますが現実的にそんなHTMLファイルは存在しないでしょうから,ごく普通の,HTMLが10KB程度に写真3枚100KB程度のファイルも準備し,計7種類のファイルを4種の方法でHTML取得し時間を比較してみました。

WebBrowseのIEバージョンは最新の「IE11」とサポート外となりつつある「IE7」を比較しています。

  VisualBasic HTMLファイル取得時間比較
項目 取得回数 平均時間[ms] WB IE7比
①HTML 100KB 半角英文字100桁×1004行
 IE11 22  789   
 WB IE11 22  221  1.1倍 
 WB IE7 28  202   
 WC 22  22   
②HTML 100KB 半角英文字200桁×506行
 IE11 22  717   
 WB IE11 22  199  1.1倍 
 WB IE7 28  184   
 WC 22  22   
③HTML 100KB 半角英文字300桁×338行
 IE11 20  727   
 WB IE11 20  191  1.1倍 
 WB IE7 24  181   
 WC 20  21   
④HTML 10MB 半角英文字100桁×102804行
 IE11 23  6058   
 WB IE11 21  11450  2.0倍 
 WB IE7 28  5644   
 WC 24  70   
⑤HTML 10MB 半角英文字200桁×47393行
 IE11 22  8505   
 WB IE11 21  8082  2.2倍 
 WB IE7 25  3630   
 WC 22  67   
⑥HTML 10MB 半角英文字300桁×34997行
 IE11 21  7504   
 WB IE11 21  7365  2.2倍 
 WB IE7 20  3317   
 WC 21  69   
⑦HTML 14.4KB + 画像3枚計141.3KB
 IE11 24  639   
 WB IE11 24  181  1.0倍 
 WB IE7 21  186   
 WC 24  22   
 WB = WebBrowser, WC = WebClient

結果として,
自分の見当とは逆にWebBrowserでは最新のIE11よりもIE7の方が高速でした。但し,一般的なHTML容量と言える100KB以下ではほとんど差がありませんでした。また,JavaScriptが付加されている場合などは結果が変わるかも知れません。

なお,WebBrowse(IE11)とIE11オブジェクトではHTMLのファイル容量や桁数,行数で結果が逆転しており優劣は判断出来ませんでした。

WebBrowseのIEバージョンの切り替えには下記サイトを参考にさせて頂きました。
C# WebBrowserのレンダリングモード
上記のC#のコードをVBに変換し活用しました。

WebBrowseのIEバージョン切り替え VisualBasicソースコード
※レジストリを操作しますので使用は自己責任でお願いします。
-----------------------------------------------------------
Imports System.Runtime.Serialization

Public Class Form1

Dim FEATURE_BROWSER_EMULATION As String = _
"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"
Dim FEATURE_DOCUMENT_COMPATIBLE_MODE As String = _
"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DOCUMENT_COMPATIBLE_MODE"

Dim userAgent As Integer = 11001 'IE11
Dim renderingMode As Integer = 110000 'IE11

Dim exeName As String = "WindowsApplication1.exe" 'デバッグ時は.vshost.exeにしておく
'Dim exeName As String = "WindowsApplication1.vshost.exe"


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim regkey1 As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.CurrentUser.CreateSubKey(FEATURE_BROWSER_EMULATION)
Dim regkey2 As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.CurrentUser.CreateSubKey(FEATURE_DOCUMENT_COMPATIBLE_MODE)

'userAgent = 7000 'IE7
'renderingMode = 70000 'IE7

regkey1.SetValue(exeName, userAgent, Microsoft.Win32.RegistryValueKind.DWord)
regkey2.SetValue(exeName, renderingMode, Microsoft.Win32.RegistryValueKind.DWord)

regkey1.Close()
regkey2.Close()

End Sub

End Class

|

« VB HTML取得時間比較 WebClient,WebBrowser,IE | トップページ | MySQL Insertが遅い! ので実験してみた »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: VB WebBrowser HTML取得時間 IEバージョン差比較:

« VB HTML取得時間比較 WebClient,WebBrowser,IE | トップページ | MySQL Insertが遅い! ので実験してみた »