Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Медленная работа InnerHTML в IE. / 6 сообщений из 6, страница 1 из 1
25.01.2010, 14:21:05
    #36429121
InnerHTML
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
Следующий код тормозит в IE, но работает с требуемой скоростью в FireFox, Opera, Safari.

Код: plaintext
1.
2.
3.
4.
5.
6.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  for (var i =  0 ; i < Span.length; ++i) {
       SpanA = Span[i].getElementsByTagName("A");
       ReText = SpanA[ 0 ].innerHTML;
  }

Если закомментировать "ReText = SpanA[0].innerHTML;", то работает нормально и в IE. Как можно ускорить приведённый фрагмент кода?
...
Рейтинг: 0 / 0
25.01.2010, 15:09:09
    #36429275
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
InnerHTML,

приведенный фрагмент кода так:
Код: plaintext
1.
2.
3.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  ReText = Span[Span.length -  1 ].getElementsByTagName('A');
  ReText = ReText[ 0 ].innerHTML;
...
Рейтинг: 0 / 0
25.01.2010, 15:43:28
    #36429397
InnerHTML
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
an0nym

приведенный фрагмент кода так:

Код: plaintext
1.
2.
3.
4.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  ReText = Span[Span.length -  1 ].getElementsByTagName('A');
  ReText = ReText[ 0 ].innerHTML;



Плохо сформулировал вопрос. Цикл нужен. Для каждого узла получаемые innerHTML обрабатываются и в зависимости от результатов обработки предпринимаются требуемые действия. Я их опустил в приведённом фрагменте кода, так как они не влияют на производительность. Пустой проход по циклу уже очень медленный для IE. Подправленный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  for (var i =  0 ; i < Span.length; ++i) {
       SpanA = Span[i].getElementsByTagName("A");
       ReText = SpanA[ 0 ].innerHTML;
       Код, обрабатывающий конкретный innerHTML.
  }

Требуется найти альтернативу к innerHTML, которая при фиксированном числе вызовов давала бы большую скорость.
...
Рейтинг: 0 / 0
25.01.2010, 15:53:17
    #36429427
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
InnerHTMLЕсли закомментировать "ReText = SpanA[0].innerHTML;", то работает нормально и в IE. Как можно ускорить приведённый фрагмент кода?
Как вы производили замеры? Если закомментировать эту строчку, то последующий "код, обрабатывающий конкретный innerHTML" или тоже пропустится, или во всяком случае будет работать намного быстрее, так как нечего обрабатывать.

Приведите обрабатывающий код.
...
Рейтинг: 0 / 0
25.01.2010, 16:15:48
    #36429501
InnerHTML
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
an0nym
Как вы производили замеры? Если закомментировать эту строчку, то последующий "код, обрабатывающий конкретный innerHTML" или тоже пропустится, или во всяком случае будет работать намного быстрее, так как нечего обрабатывать.

Приведите обрабатывающий код.


Был код, при выполнении которого не возникало видимых пользователю задержек в FireFox, Opera, Safari, но возникало сильное торможение в IE. Я стал искать причину, вызывающую торможение. Я поставил в конце кода alert и стал последовательно комментировать участки кода. В результате, следующий код выполняется с торможением:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  for (var i =  0 ; i < Span.length; ++i) {
       SpanA = Span[i].getElementsByTagName("A");
       ReText = SpanA[ 0 ].innerHTML;
       // Всё остальное уже закомментировано.
  }
  alert("Окончание обработки");

Для следующего фрагмента кода (последняя строка закомментирована) визуально задержек не видно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  DT = document.getElementById("VST");
  var Span = DT.getElementsByTagName("span");
  for (var i =  0 ; i < Span.length; ++i) {
       SpanA = Span[i].getElementsByTagName("A");
       // Всё остальное уже закомментировано.
  }
  alert("Окончание обработки");

Поэтому был сделан вывод, что торможение вызвано именно строкой:

Код: plaintext
1.
ReText = SpanA[ 0 ].innerHTML;

Так как торможение наблюдается и при отсутствии "код, обрабатывающий конкретный innerHTML", то он никак не может быть его причиной.
...
Рейтинг: 0 / 0
27.01.2010, 12:57:43
    #36433400
InnerHTML
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная работа InnerHTML в IE.
Заменил логику работу с использования innerHTML на использование DOM (childNodes, nodeValue). При помощи getTime замерил, что работа ускорилась приблизительно в 20 раз для IE, ускорилась в пределах погрешности для других браузеров. Проблема решена. Причина, как и ожидалось, в медленной работе innerHTML в IE.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Медленная работа InnerHTML в IE. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]