Несколько setTimeout: параллельный или рекурсивный? - PullRequest
0 голосов
/ 01 марта 2019

Предположим, что в такой ситуации мне нужно выполнить некоторую работу в различных временных интервалах .

Итак, я получил массив для описания плана работы следующим образом.

var jobs = [ [ "a", 10 ], [ "b", 20 ], [ "c", 25 ], [ "d", 30 ], [ "e", 15 ], ... ];

Тогда возникает вопрос.Должен ли я ставить ALL задач в Web Apis за один раз, как это?

var timer = 0;
jobs.forEach( job => {
    timer += job[1] * 100;
    window.setTimeout( () => console.log( job[0] ), timer );
} );
jobs = undefined;

Ничего не осталось в пространстве JavaScript, кажется чистым, но многие Web Apis зарегистрированы.

Илия должен использовать обычный рекурсивный способ, подобный этому?

var tick = () => {
    if ( ! jobs.length ) return;
    else job = jobs.shift();

    window.setTimeout( () => {
        tick();
        console.log( job[0] );
    }, job[1] * 100 );
}

tick();

В пространстве JavaScript всегда остается большой массив, но используется только 1 Web Api.

Или такой глобальный интервальный цикл?

var timer = 0;
window.setInterval( () => {
    if ( ! jobs.length ) return ;
    else if ( ++ timer >= jobs[0][1] ) {
        timer = 0;
        console.log( jobs[0][0] );
        jobs.shift();
    }
}, 100 );

Пользовательский цикл обработки событий, как я думаю, и рекурсивный способ.

Итак, есть ли разница между этими тремя способами?

В любом случае, эта ситуацияявляется страницей, основанной на долгом времени выполнения браузера.

Не требуется строго точное время, но необходимо использовать как можно меньше ЦП / памяти.

Какой метод значительно экономит память после веб-страницыоткрывается например, один месяц?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...