Сообщение от jaroslav.tavgen
|
А как сделать так, чтобы он добавлял по одной буковке за раз?
|
В цикле практически ни как.
JS строго однопоточен. т.е. использовать несколько потоков в одном контексте исполнения невозможно.
в JS невозможно ограничить область видимости одного потока от области видимости другого потока (глобальный объект, цепочка прототипов) доступны всем и всегда. Изменения данных в одном потоке сделают непредсказуемым результат работы в другом потоке.
самый простой способ обойти блокировку других задач (рендеринга) пока работает долгий код это разбить задачу вызовами асинхронной функции setTimeout (задача,0) т.е. запустить/продолжить задачу после того как браузер сделает все ожидающие операции.
небольшой пример
<body><script>
function repeat (fun,size){
+function asd (){
fun();
if (size % 110 == 0) document.body.innerHTML += "<br>";
if ( --size > 0) setTimeout (asd,0);
}();
}
function idiotizm (){
document.body.innerHTML += "a";
}
repeat (idiotizm , 6000);
</script>