Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.03.2013, 23:44
Интересующийся
Отправить личное сообщение для RogerUP Посмотреть профиль Найти все сообщения от RogerUP
 
Регистрация: 04.02.2011
Сообщений: 11

Большое время выполнения
Здравствуйте. Имеется такой код:
rsCpu = oService.ExecQuery("SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor");
  for (i=0; i<rsCpu.count; i++)
    cpuDiv.innerHTML += '<div style="top:' + (i*15+15) + 'px; left:3px;">Core' + (i==6?' All':i) + ': ' + rsCpu.ItemIndex(i).PercentProcessorTime + '</div>';

Выполнение ExecQuery занимает около 1 мс, а цикла for около 300 мс (при rsCpu.count = 7), хотя добавление к innerHTML, добавление i и сравнение i<rsCpu.count занимает 1-3 мс. Куда может уходить остальное время?
Время замерял с помощью
new Date().getMilliseconds()
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2013, 04:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Классический недочет. Изменение innerHTML - дорогая операция. Не нужно в цикле менять innerHTML, нужно накапливать все в переменной, и затем после цикла уже добавлять ее значение в innerHTML. Может вас заинтересует метод insertAdjacentHTML
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2013, 14:00
Интересующийся
Отправить личное сообщение для RogerUP Посмотреть профиль Найти все сообщения от RogerUP
 
Регистрация: 04.02.2011
Сообщений: 11

danik.js, опытным путем проверено, что innerHTML выполняется быстро (1-2 мс).
Также выяснил, что очень много времени занимает первое обращение к rsCpu (порядка 95% от всего времени выполнения цикла for)
Что делать в этой ситуации? Таких обращений к таблицам windows в коде 2, а весь код выполняется каждую секунду
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2013, 14:07
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от RogerUP
Что делать в этой ситуации?
Профилировать код.
Кстати да, что-то я упустил что count всего 7. При таких малых циклах не должно быть проблем из-за innerHTML, однако лучше все-таки сделать как я написал
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2013, 14:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

К слову innerHTML не так уж и быстр. К примеру если в элементе innerHTML равен содержимому этой страницы. То 10 итераций с непосредственным изменением innerHTML занимает 150мс. Это хром, самый быстрый браузер, и не слижком слабый комп (Intel Core i5M)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена действия события во время выполнения анимации gunsoy Общие вопросы Javascript 2 12.06.2012 13:27
Время выполнения z700i Общие вопросы Javascript 7 02.11.2011 16:10
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35
разное время выполнения операции ropowek Events/DOM/Window 2 08.10.2008 13:27
как отобразить в окне значения счетчика во время выполнения цикла FOR Алекс97 Общие вопросы Javascript 5 06.09.2008 10:36