コード実行のスケジュール化

TaskMgrとTaskRunner

TaskRunnerクラスは、一定の間隔で関数を実行するためのクラスです。Ajaxコンテンツを30秒ごとにリロードするような場合など、送信要求(ポーリング)を行う動作に利用するのが便利です。TaskMgrは、TaskRunnerのシングルトンオブジェクトであり、TaskRunnerにすばやくアクセスするために利用できます。

var stop = false;
var task = {
    run: function(){
        if(!stop){
            alert(new Date());
        }else{
            runner.stop(task); // 必要に応じてタスクを終了することも可能
        }
    },
    interval: 30000 // 30秒毎に実行
};
var runner = new Ext.util.TaskRunner();
runner.start(task);

// TaskMgrの利用
Ext.TaskMgr.start({
    run: function(){
    },
    interval: 1000
});

DelayedTask

DelayedTaskクラスは、メソッドを実行するのに"バッファ"を持たせる必要がある時に便利です。DelayedTaskに指定されたタスクは、設定された時間を待って実行されます。この間に、もう一度同じタスクが呼ばれると前の呼び出しは取り消されます。つまり、同じタスクは、一定間隔で一度しか実行されないということです。このクラスは、ユーザーがテキストフィールドの入力が終わっているかどうか調べる場合などに特に便利です。

 var task = new Ext.util.DelayedTask(function(){
     alert(Ext.getDom('myInputField').value.length);
 });
 // 500ミリ秒待機して処理を実行。ユーザーがその間に他のキーを押したら
 // 待機時間がリセットされ、再度500ミリ秒の待機を開始
 Ext.get('myInputField').on('keypress', function(){
     task.delay(500); 
 });
 
この例では、addListener/onといったイベント処理関数とDelayedTaskを組み合わせることにより、イベント処理の実行にバッファを設定できることを示しています。