Я бы просто использовал фальшивый индикатор прогресса.Вот пример.
http://jsfiddle.net/dM8Qp/1/
Невозможно узнать, сколько времени пройдет, прежде чем произойдет событие DOMready
.
html
<div id="pb"></div>
js
$("#pb").progressbar();
var preloader = $("<div />").css("height", "0px").animate({
height: 95
}, {
step: function() {
//console.log(Math.ceil(parseFloat($(this).css("height"))))
$("#pb").progressbar("value", Math.ceil(parseFloat($(this).css("height"))));
},
duration: 2000
});
$(document).ready(function(){
preloader.promise().done(function(){
$("#pb").add(preloader).remove();
});
});
Обновлено за предложение Гдорона в комментариях.