Итерации и локальное кэширование
При DOM‑операциях перебор массива объектов является довольно типичной задачей. Давайте предположим, что вы разрабатываете HTML‑приложение, которое индексирует содержание страниц. Нашей задачей является сбор всех элементов h1 на текущей странице, чтобы затем использовать их в проиндексированном массиве.
Ниже приведен пример того, как это можно осуществить:
function Iterate(aEntries) {
for (var i=0; i < document.getElementsByTagName(‘h1’).length; i++) {
aEntries[aEntries.length] =
document.getElementsByTagName(‘h1’)[i].innerText;
}
}
Что плохого в приведенном примере? Он содержит два обращения к массиву document.getElementsByTagName(‘h1’) на каждой итерации. Внутри цикла наш скрипт будет:
вычислять размер массива;
получать значение свойства innerText для текущего элемента в массиве.
Это совершенно не эффективно. Дополнительные вычисления, связанные с многочисленными ненужными обращениями к DOM‑дереву для получения информации, которую мы и так знаем, являются совершенно лишними. Давайте рассмотрим следующую модификацию этого скрипта:
function Iterate2(aEntries) {
var oH1 = document.getElementsByTagName(‘h1’);
var iLength = oH1.length;
for (var i=0; i < iLength; i++) {
aEntries[aEntries.length] = oH1(i).innerText;
}
}
Таким образом, мы кэшируем DOM‑массив в локальную переменную, и затем все действия над ней производятся гораздо быстрее. N обращений к DOM‑дереву превращается всего в одно‑единственное в результате использования кэширования.
Дата добавления: 2015-05-19; просмотров: 753;