Текст добавляется сразу же - просто браузер не обновляет экран до тех пор, пока вы не закончите выполнение javascript (он ждет, чтобы увидеть, вносите ли вы больше изменений в DOM, чтобы он мог перекомпоноваться и перекраситься один раз за все изменения).
Чтобы заставить экран обновиться сразу же, нужно немедленно вернуться и запустить run()
на очень коротком setTimeout()
, например так:
$("#button2").click(function() {
$('#progress').append('<p>Computing…</p>');
setTimeout(run, 1); // Expensive computational task.
return false;
});