Мне трудно объяснить, почему следующий код работает медленнее в IE9, чем в IE8!
Вот тестовый код, который плавно работает примерно за полсекунды в (последних) FF / Chrome / Safari на OS X, WinXP и Win7 плюс IE7 & 8 на WinXP (для простоты я удалил твик, который заставляет его работать в IE6).
Почему-то я не могу объяснить, в IE9 он ужасен, медленный и неуклюжий. Уменьшение времени для setTimeout делает его немного быстрее, но не менее резким.
Я попытался удалить и протестировать некоторые из возможных узких мест (например, Math.min ... все без изменений.
Я в тупике ... может ли кто-нибудь указать мне в в правильном направлении? ... желательно такое, которое не требует анализа браузера?
Вот тестовый код ...
<div id = 'panel' class='noShow' style='background-color: #aaa;'>
<div id = 'wrapper' class='slideWrapper'>
<p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p><p>xxxxxxxxxxx</p>
</div>
</div>
<script type = 'text/javaScript'>
var e = document.getElementById('panel');
var w = document.getElementById('wrapper');
w.style.overflow = 'hidden';
w.style.height = '1px';
var sh = w.scrollHeight;
show();
function show()
{
setTimeout(function()
{
w.style.height = Math.min(sh, (w.offsetHeight + Math.ceil(sh/15))) + 'px';
if(
(w.offsetHeight < sh)
)
{
show(e);
}
else
{
w.style.height = 'auto';
}
}, 20);
}
</script>