zlo-kazan
Скриптер
- Сообщения
- 374
- Репутация
- 100
Провел маленький тест функций поиска текста на HTML-странице.
Текст страницы получаем через:
IE.au3
WinHTTP
InetGet (в фоновом режиме используя мультипоточность)
Результаты для 100 страниц:
IE = 238 сек
IE скрытый = 174 сек
WinHTTP = 65 сек
InetGet мультипоток = 20 сек :laugh:
Компьютер:
C2D E4300
DDR2 667Mhz
Канал связи:
8Мбит/с
OS:
WinXP 86x SP3 (через http://half-open.com/ поменял количество одновременных подключений на 1000)
IE8
Текст страницы получаем через:
IE.au3
WinHTTP
InetGet (в фоновом режиме используя мультипоточность)
Код:
#include <IE.au3>
#include <Inet.au3>
#include <Array.au3>
Global $status="запуск скрипта"
Global $text_search="123" ;текст который ищем
AdlibRegister("TT",100)
DirCreate(@ScriptDir & "\temp")
$all= 100
dim $DW[$all+1]
dim $text[$all+1]
dim $oIE3[$all+1]
$timerInetGet=0
$timerWinHTTP=0
$timerIE1=0
$timerIE2=0
Search_inet($all)
Search_WinHTTP($all)
Search_IE1($all)
Search_IE2($all)
msgbox(64,"Скорость обработки", _
"Через IE= " & $timerIE1 & "сек" & @CRLF & _
"Через IE в скрытом режиме= " & $timerIE2 & "сек" & @CRLF & _
"Через WinHTTP= " & $timerWinHTTP & "сек" & @CRLF & _
"Через InetGet в фоновом режиме используя мультипоточность= " & $timerInetGet & "сек" & @CRLF)
; Сбор страниц через IE.au3 в открытом виде
Func Search_IE1($all)
$Timer=TimerInit()
for $i=1 to $all
$status="сбор текста через IE = " & $i &"/"&$all
$link="http://yandex.ru/yandsearch?p="&$i-1&"&text="&$text_search&"&lr=43"
$oIE = _IECreate($link)
_IELoadWait($oIE)
$text[$i]=_IEDocReadHTML($oIE)
_IEQuit($oIE)
Next
$test3=_text_Search($all, $text)
$timerIE1=round(TimerDiff($timer)/1000, 2)
;~ msgbox(0,"Search_IE1", "Потрачено: " & round(TimerDiff($timer)/1000, 2) & " сек")
;~ _ArrayDisplay($test3)
EndFunc
; Сбор страниц через IE.au3 в скрытом виде
Func Search_IE2($all)
$Timer=TimerInit()
for $i=1 to $all
$status="сбор текста через IE = " & $i &"/"&$all
$link="http://yandex.ru/yandsearch?p="&$i-1&"&text="&$text_search&"&lr=43"
$oIE2 = _IECreate($link,0,0)
_IELoadWait($oIE2)
$text[$i]=_IEDocReadHTML($oIE2)
_IEQuit($oIE2)
Next
$test3=_text_Search($all, $text)
$timerIE2=round(TimerDiff($timer)/1000, 2)
;~ msgbox(0,"Search_IE2", "Потрачено: " & round(TimerDiff($timer)/1000, 2) & " сек")
;~ _ArrayDisplay($test3)
EndFunc
; Сбор страниц через WinHTTP
Func Search_WinHTTP($all)
$Timer=TimerInit()
For $i=1 to $all
$status="сбор текста через WinHTTP = " & $i &"/"&$all
$link="http://yandex.ru/yandsearch?p="&$i-1&"&text="&$text_search&"&lr=43"
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', $link, False)
$oHTTP.Send('')
$oHTTP.WaitForResponse
$text[$i] = $oHTTP.ResponseText
$oHTTP=0
;~ msgbox(0,"",$sHTML[$i])
Next
$test2=_text_Search($all, $text)
$timerWinHTTP=round(TimerDiff($timer)/1000, 2)
;~ msgbox(0,"Search_WinHTTP", "Потрачено: " & round(TimerDiff($timer)/1000, 2) & " сек")
;~ _ArrayDisplay($test2)
EndFunc
; Сбор страниц через InetGet
Func Search_inet($all)
$Timer=TimerInit()
For $i=1 to $all
$status="загрузка " & $i & "/" & $all
$link="http://yandex.ru/yandsearch?p="&$i-1&"&text="&$text_search&"&lr=43"
$DW[$i]=InetGet($link, @ScriptDir & "\temp\" & $i &".txt", 1, 1)
Next
Do
Sleep(250)
If TimerDiff($Timer)>60*1000 Then ExitLoop
Until chek_inetgetinfo($all)
For $i=1 to $all
InetClose($DW[$i])
Next
$text=_txt_read($all)
$test1=_text_Search($all, $text)
$timerInetGet=round(TimerDiff($timer)/1000, 2)
;~ msgbox(0,"Search_inet", "Потрачено: " & round(TimerDiff($timer)/1000, 2) & " сек")
;~ _ArrayDisplay($test1)
EndFunc
;обработка массив страниц.
Func _text_Search($all, $text)
local $k=0
dim $test_all[1]
For $i=1 to $all
$status="сверка " & $i & "/" & $all
if StringRegExp($text[$i], '(?si)href=".+?(http.+?)".+?>')=0 then ContinueLoop
$test=StringRegExp($text[$i], '(?si)href=".+?(http.+?)".+?>', 3)
ReDim $test_all[$k+Ubound($test)+1]
For $j=0 to UBound($test)-1
$k+=1
$test_all[$k]=$test[$j]
Next
Next
return $test_all
EndFunc
; чтение txt-файлов из temp
Func _txt_read($all)
dim $text[$all+1]
For $i=1 to $all
$status="читаем " & $i & "/" & $all
$text[$i]=FileRead(@scriptdir & "\temp\" & $i & ".txt")
Next
return $text
EndFunc
; в этой функции проверяются все закачки и ждем пока все докачается.
Func chek_inetgetinfo($all)
local $k=0
for $i=1 to $all
if InetGetInfo($DW[$i], 2)=True then $k+=1
Next
$status="загруженно " & $k & "из" & $all
if $k=$all then
;~ msgbox(0,"",$k)
Return True
Else
Return False
EndIf
EndFunc
; отдельно вынес ToolTip со статусом
Func TT()
ToolTip("Статус: " & $status,0,0)
EndFunc
Результаты для 100 страниц:
IE = 238 сек
IE скрытый = 174 сек
WinHTTP = 65 сек
InetGet мультипоток = 20 сек :laugh:
Компьютер:
C2D E4300
DDR2 667Mhz
Канал связи:
8Мбит/с
OS:
WinXP 86x SP3 (через http://half-open.com/ поменял количество одновременных подключений на 1000)
IE8