重い処理によるUIへのブロックを抑制するには、setTimeoutを使います。次のようにして、重い処理を分割して、分割した処理の間にユーザインタフェース用のスレッドが動けるようにします。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>setTimeout sample 1</title>
</head>
<body>
<div id="target" style="position:absolute;">target</div>
<script>
var INTERVAL=500;
var current_text = "";
function log(message) {
current_text = current_text + '<br />' + message;
document.getElementById('target').innerHTML = current_text;
}
function proc1() {
log("start proc1");
// 重たい処理1
log("end proc1");
}
function proc2() {
log("start proc2");
// 重たい処理2
log("end proc2");
}
function proc3() {
log("start proc3");
setTimeout(function() {
proc1();
// ここでUIへのブロックが抑制される
setTimeout(proc2, INTERVAL);
}, INTERVAL);
log("end proc3");
}
proc3();
</script>
</body>
</html>
JavaScriptについては、下記の書籍の参考になるでしょう。
プログラミング言語一般については、下記が参考になるでしょう。
- クラスベースのオブジェクト指向プログラミング言語の基礎を学ぶには … 改訂版 基礎Java(CD-ROM付) (IMPRESS KISO SERIES)
- クラスベースのオブジェクト指向プログラミング言語を学ぶには … プログラミング言語Java (The Java Series)
- 関数型プログラミング言語を学ぶには … Scalaスケーラブルプログラミング第2版
- プログラミング言語の理論を学には … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)