Вы стали свидетелем одной из оптимизаций современных браузеров.
http://jsbin.com/OBaMoqe/1 - в комментариях пометил основную суть, но повторюсь
когда вам нужно выполнить что-то жирное, вы непременно должны вынести это дело из общего контекста выполнения (через setTimeout или предпочтительнее webworkers), иначе остальной код и все события по перерисовке будут ожидать окончания работы этой жирной логики.
js - асинхронный язык. Вся соль языка в том, что все тяжелые вычисления можно и нужно проводить паралельно.