Однопользовательская функция двигателя JavaScript позволяет долгое время обрабатывать большую петлю, что приводит к тому, что другие события (такие как операции пользователей) не могут реагировать вовремя, и в суровых случаях это может вызвать задержку или даже поддельную смерть. Чтобы решить вышеупомянутую проблему, возможным механизмом состоит в том, чтобы разделить большой цикл на несколько небольших фрагментов петли для выполнения фрагментов, чтобы двигатель JavaScript имел возможность вставить и выполнять другие вещи между сегментами, тем самым эффективно улучшая опыт работы.
Ansync.js
Кода -копия выглядит следующим образом:
Функция ansync (TotalCount, SeggEgmentCount, WorkCallback, returnCallback)
{
var num_of_item_for_each_segment = segmentCount;
var num_of_segment = math.ceil (totalCount / num_of_item_for_each_segment);
var count_of_segment = 0;
var таймер;
var start, end;
this.process = function (Scope, Timeout)
{
if (Scope! = Неопределено)
{
workcallback = workcallback.bind (scope);
returnCallback = returnCallback? returncallback.bind (scope): не определен;
}
if (count_of_segment == num_of_segment)
{
ClearTimeout (таймер);
if (returncallback! = не определен)
returnCallback ();
}
еще
{
start = count_of_segment * num_of_item_for_each_segment;
end = math.min (totalCount, (count_of_segment + 1) * num_of_item_for_each_segment);
if (num_of_segment == 1) // Не нужно создавать таймер
{
WorkCallback (Start, End);
count_of_segment = 1;
this.process ();
}
еще
{
timer = settimeout (function ansynctimeout () {
if (workcallback (start, end)) // Завершить процесс, если функция возвращает true
{
count_of_segment = num_of_segment;
}
еще
{
count_of_segment ++;
}
this.scope.process ();
} .bind ({scope: this}), timeout == не определен? Ansync.timeout: тайм -аут);
}
}
}
}
Ansync.timeout = 5;
Метод очень прост, но он очень практичен. Пожалуйста, обратитесь к нему, если у вас есть те же требования проекта.