offsetHeight и style.displayПроведем тестирование скорости вычисления значений offsetHeight и style.display.
Для удобства профайлинга вынесем доступ к этим значениям в отдельные функции:
function fnOffset(el)
{
return !!el.offsetHeight;
}
function fnStyle(el)
{
return el.style.display=='none';
} где el — тестовый контейнер.
Проведем тест на тысяче итераций, на каждой итерации будем добавлять в тестовый контейнер элемент <span>. Проверим время, затрачиваемое на добавление тысячи элементов, без вызова тестовых функций тест clean. Проведем тестирование во всех браузерах, замеряя время следующим способом:
var time_start = new Date().getTime(); /* ... тест ... */ var time_stop=new Date().getTime(); var time_taken=time_stop-time_start;
где time_taken — это время, затраченное на тест, в миллисекундах.
| IE sp62 | IE8b | Firefox 2.0.0.12 | Opera 9.22 | Safari 3.04b | |
|---|---|---|---|---|---|
| clean | 128 | 153 | 15 | 15 | 16 |
| offsetHeight | 23500 | 10624 | 4453 | 4453 | 5140 |
| style.display | 171 | 209 | 56 | 56 | 34 |
| height vs. style | 140 раз | 50 раз | 80 раз | 80 раз | 150 раз |
Таблица 6.3. Результаты выполнения тестов по определению видимости элементов. Времена приведены в миллисекундах. Взято среднее значение серии из 5 тестов
Судя по результатам тестов, доступ к offsetHeight медленнее в 50-150 раз.
Получается, что по отдельности и offsetHeight, и добавление элементов работают быстро, а вместе — очень медленно. Как же так?