veretragna
Как писал, так и работает.
- Сообщения
- 140
- Репутация
- 10
Собственно, такая проблема.
Попробовал сегодня перенести часть опрашивающего кода одного из своих скриптов-ботов на .querySelector(), и после этого стал наблюдать очень медленную работу скрипта как раз в этой части (до этого использовал .getElementsByClassName()).
Код опрашивает ровно 10 записей "дневника" и выводит их на текстовую панель. Если использовать для их поиска на форме и опроса метод .getElementsByClassName(), эта часть кода выполняется 0,5-0,7 секунд, а если .querySelector(), то 3-4 секунды. Это очень много, и при этом концептуально код не поменялся.
Вопрос: можно ли ускорить выполнение .querySelector()? Или медленность - это его болячка?
Полностью рабочий пример с кодом будет чуть позже, бот большой и сложный, на свежую голову выцарапаю из него пример и выложу.
А пока ограничусь куском проблемного кода для понимания ситуации.
Было:
Стало:
Попробовал сегодня перенести часть опрашивающего кода одного из своих скриптов-ботов на .querySelector(), и после этого стал наблюдать очень медленную работу скрипта как раз в этой части (до этого использовал .getElementsByClassName()).
Код опрашивает ровно 10 записей "дневника" и выводит их на текстовую панель. Если использовать для их поиска на форме и опроса метод .getElementsByClassName(), эта часть кода выполняется 0,5-0,7 секунд, а если .querySelector(), то 3-4 секунды. Это очень много, и при этом концептуально код не поменялся.
Вопрос: можно ли ускорить выполнение .querySelector()? Или медленность - это его болячка?
Полностью рабочий пример с кодом будет чуть позже, бот большой и сложный, на свежую голову выцарапаю из него пример и выложу.
А пока ограничусь куском проблемного кода для понимания ситуации.
Было:
Код:
Local $temp = _IEGetObjById($oIE, "diary")
If IsObj($temp) Then
$tdivs = $temp.getElementsByClassName("d_line")
For $tdiv In $tdivs
If Not StringInStr($tdiv.style.display, "none") Then
$cnt += 1
If $cnt = 11 Then Return
local $props = $tdiv.getElementsByTagName("div")
For $z In $props
If StringInStr($z.className, "d_time") Then
$time = $z.innertext
ElseIf StringInStr($z.className, "d_msg") Then
$msg = $z.innertext
EndIf
Next
; дальше идет создание элементов ListViewItem, ничего интересного.
EndIf
Next
EndIf
Стало:
Код:
Local $temp = _IEGetObjById($oIE, "diary")
If IsObj($temp) Then
$tdivs = $temp.querySelectorAll("div.d_line")
For $tdiv In $tdivs
If Not StringInStr($tdiv.style.display, "none") Then
$cnt += 1
If $cnt = 11 Then Return
$time = $tdiv.querySelector("div.d_time").innertext
$msg = $tdiv.querySelector("div.d_msg").innertext
; дальше идет создание элементов ListViewItem, ничего интересного.
EndIf
Next
EndIf