а я в подобных случаях делаю функцию с самовызовом через нулевой таймаут.
setTimeout(function(){}, 0) выполнит указанную функцию сразу по окончании текущей функции. При этом происходит разрыв цепочки выполнения и интерфейс может обновиться. Во-вторых, это позволяет избежать проблем с уведомлением о зависшей функции, особенно в IE с его "гениальным" способом определения зависа. В-третьих, этот способ будет поддерживаться бОльшим количеством браузеров.
Если же функция использует какой-либо циклический код, а является так сказать набором последовательных команд, ее можно разбить на несколько частей и вызывать эти части друг за другом.
Из минусов - более громоздкий код.
|