Прямо сейчас, я не думаю, что у вас есть большой выбор, на самом деле.
Я не проверял, работала ли ваша функция, но использование setTimeout и разбиение работы на небольшие куски, вероятно, является подходящим способом.
Однако в будущем вы можете использовать для этого Web Workers ; цитирование с веб-страницы Mozilla :
Работники предоставляют простые средства для веб
контент для запуска скриптов в фоновом режиме
потоки. После создания работник может
отправлять сообщения в нерестовую задачу
отправка сообщений в обработчик событий
указано создателем.
Рабочий поток может выполнять задачи
без вмешательства пользователя
интерфейс. Кроме того, они могут
выполнить ввод / вывод с использованием XMLHttpRequest
(хотя responseXML и канал
атрибуты всегда нулевые).
И:
Один из способов, с помощью которого работники полезны, - это разрешить
ваш код для выполнения
ресурсоемкие вычисления
без блокировки пользовательского интерфейса
нить.
Они уже доступны в Firefox 3.5, и я думаю, что они также предоставляются Google Gears - но они еще не широко доступны, поэтому вам, вероятно, не стоит использовать их пару лет, по крайней мере, для приложения используется кем угодно: - (