Javascript →
setImmediate через MessageChannel
В данной статье будет коротко описан еще один метод реализации «нулевой» задержки setTimeout(callback, 0).
Всем кому интересно — под кат.
Стандартный setTimeout делает минимальную задержку в несколько миллисекунд, в IE 10 даже изобрели setImmediate который позволяет устанавливать «нулевую» задержку. Про то, как это работает, хорошо написано тут ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
Пример кода, который работает в Chrome, Safari, Opera
Принцип работы прост, каналы связи в этом механизме реализованы в виде двух труб, с портами на каждом конце.
Достоинство этого метода в отличие от метода описанного в dbaron.org/log/20100309-faster-timeouts то, что будет работать в WebWorker'ах.
Не все браузеры поддерживаются. Firefox не работает. т.к. не поддерживает MesageChannel и SharedWorker.
Стандарт MessageChannel описан в документации www.whatwg.org/specs/web-apps/current-work/complete/web-messaging.html#channel-messaging
Всем кому интересно — под кат.
Коротко о главном
Стандартный setTimeout делает минимальную задержку в несколько миллисекунд, в IE 10 даже изобрели setImmediate который позволяет устанавливать «нулевую» задержку. Про то, как это работает, хорошо написано тут ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
Пример кода, который работает в Chrome, Safari, Opera
function setZeroTimeout(callback) {
var channel = new MessageChannel();
channel.port1.onmessage = callback;
channel.port2.postMessage('');
}
Принцип работы прост, каналы связи в этом механизме реализованы в виде двух труб, с портами на каждом конце.
Достоинства
Достоинство этого метода в отличие от метода описанного в dbaron.org/log/20100309-faster-timeouts то, что будет работать в WebWorker'ах.
Минусы
Не все браузеры поддерживаются. Firefox не работает. т.к. не поддерживает MesageChannel и SharedWorker.
Стандарт MessageChannel описан в документации www.whatwg.org/specs/web-apps/current-work/complete/web-messaging.html#channel-messaging
09.09.2011 13:09+0400