非同期ループ処理 (7) - 同期非同期複合型

これまで述べてきた非同期ループ処理の問題点として、 setTimeout の間隔を0ミリ秒にしたところで、全体としては単純な for ループよりもかなり時間がかかってしまうことである。

そこで、 setTimeout しない同期的なループ処理も組み合わせて適度に高速化を図る。
下記の例では3回の処理を一単位としている。

var syncAsyncProcessor = {

    _array : [],
    _count : -1,

    start : function(aArray)
    {
        // 開始処理
        dump("start
");
        // 初期化
        this._count = -1;
        this._array = aArray;
        this._next();
    },

    _next : function()
    {
        var elt = this._array.shift();
        if ( elt ) {
            if ( ++this._count % 3 == 0 )
                // 数回に一度、非同期
                setTimeout(function(){ syncAsyncProcessor._process(elt); }, 1000);
            else
                // それ以外は同期
                syncAsyncProcessor._process(elt);
        } else {
            setTimeout(function(){ syncAsyncProcessor._finish(); }, 1000);
        }
    },

    _process : function(aElt)
    {
        // 処理
        dump("processing (" + this._count + ")... " + aElt + "
");
        // 次の処理へ
        this._next();
    },

    _finish : function()
    {
        // 終了処理
        dump("finish
");
    },

};

syncAsyncProcessor.start(['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']);

TOP

1 Comment to “非同期ループ処理 (7) - 同期非同期複合型”

v1d4l0k4:

I tried to apply this concept on my code, but doesn’t function. You could help me?

My code:

—–

—–

Many thanks!

Cheers,
v1d4l0k4

TOP

TOP