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 раз.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
2.2.2. Цикл, который выполняется не меньше одного раза
2.2.2. Цикл, который выполняется не меньше одного раза Обратите внимание, что в цикле используется условие продолжения, а не завершения повторения! Это не цикл “до”, подобный REPEAT… UNTIL в Pascal, хотя назначение его то же – позволить телу цикла выполнится хотя бы
Повседневный дизайн: бумага FreshPaper продлевает жизнь продуктов в три раза Николай Маслухин
Повседневный дизайн: бумага FreshPaper продлевает жизнь продуктов в три раза Николай Маслухин Опубликовано 04 сентября 2013 Опасаясь глобального продовольственного кризиса, ученые, инженеры и дизайнеры по всему миру изобретают способы будущего