Мне трудно объяснить, почему следующий код работает медленнее в 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>