92 раза

Оптимизация: определение класса hide

Давайте подробнее остановимся на предложенном мной решении. Предлагаю следующую реализацию:

function isHidden(el)

{

var p=el;

var b=document.body;

var re=/(^|s)hide($|s)/;

while(p && p!=b && !re.test(p.className))

p=p.parentNode;

return !!p && p!=b;

}

Предполагается, что корневые элементы DOM скрывать не имеет смысла и поэтому проверки ведутся только до document.body.

Предложенное решение явно не спустит лавину reflow, так как никаких вычислений и измерений не проводится. Однако немного смущает проход до корня документа: что же будет при большой вложенности элементов? Давайте проверим. Тест isHidden проводится для вложенности 2 (document.body / test_div), а тест isHidden2 — для вложенности 10 (document.body / div * 8 / test_div).

IE sp62

Firefox 2.0.0.12

Opera 9.22

Safari 3.04b

offsetHeight

23500

10624

4453

5140

isHidden

231

351

70

71

isHidden2

370

792

212

118

offsetHeight vs. isHidden

102 раза

30 раз

73 раза

92 раза

Таблица 6.5. Резульаты выполнения функции isHidden. Времена приведены в миллисекундах

Как показывают тесты, даже при большой вложенности падение скорости невелико. Таким образом, мы получили универсальное решение, которое быстрее доступа к offsetHeight в 30–100 раз.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

2.2.2. Цикл, который выполняется не меньше одного раза

Из книги автора

2.2.2. Цикл, который выполняется не меньше одного раза Обратите внимание, что в цикле используется условие продолжения, а не завершения повторения! Это не цикл “до”, подобный REPEAT… UNTIL в Pascal, хотя назначение его то же – позволить телу цикла выполнится хотя бы


Повседневный дизайн: бумага FreshPaper продлевает жизнь продуктов в три раза Николай Маслухин

Из книги автора

Повседневный дизайн: бумага FreshPaper продлевает жизнь продуктов в три раза Николай Маслухин Опубликовано 04 сентября 2013 Опасаясь глобального продовольственного кризиса, ученые, инженеры и дизайнеры по всему миру изобретают способы будущего