Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var start = window.performance && window.performance.now() || new Date().getTime()
(смещение не будет иметь значения)new Date().getTime() можно написать просто Date.now()setInterval не дает желаемого результата?setTimeout более гибкий. Преположим Вы хотите делать polling на свой сервер каждые 500 миллисекунд, при это гарантируя, что два запроса на сервер не поступит одновременно. setInterval невозможно, т.к. если вы не получили ответ через 500 миллисекунд, setInterval пошлет еще раз запрос.setInterval использовать setTimеout в success callback каждого запроса за вычетом времени на запрос, можно гарантировать, что в среднем запросы будут уходить каждый 500 миллисекунд и исключительно один за одним.working = false
setInterval ->
return if working
working = true
$.get '/smth', -> working = false
, 200
var timeout = null;
timeout = setTimeout([function], [time]);
function [function]() {
if (timeout) clearTimeout(timeout);
}
//предполагается, что это будет находится в теле функции
//или методе, в которой/ом, будет устанавливатся таймер.
//очищаем объект в котором лежал счетчик, если он уже существовал до этого.
var timeout = null;
//инициализируем новый счетчик
timeout = setTimeout([function], [time]);
//как только интервал закончился, останавливаем счетчик
function [function]() {
if (timeout) clearTimeout(timeout);
}
работа setTimeout после истечения времени будет продолжаться
setInterval(function(){throw 'asd'}, 500) сработает только 1 раз.> u = []
> (function(){ var i, a = function(){ var t = setTimeout(function(){ clearTimeout(t); throw 'err' }, 100) }; for (i = 0; i <= 1000; i++) a() })()
// тут err много раз
> u.push(process.memoryUsage())
> u
[ { rss: 22462464, heapTotal: 16702208, heapUsed: 6784336 },
{ rss: 27422720, heapTotal: 17734144, heapUsed: 7669848 },
{ rss: 27914240, heapTotal: 17734144, heapUsed: 8310264 },
{ rss: 28450816, heapTotal: 26122752, heapUsed: 8936288 },
{ rss: 32952320, heapTotal: 26122752, heapUsed: 9413880 } ]
// то же для
(function(){ var i, a = function(){ var t = setTimeout(function(){ throw 'err' }, 100) }; for (i = 0; i <= 1000; i++) a() })()
> u
[ { rss: 23154688, heapTotal: 16702208, heapUsed: 6874448 },
{ rss: 28086272, heapTotal: 16702208, heapUsed: 7206640 },
{ rss: 28798976, heapTotal: 17734144, heapUsed: 7408280 },
{ rss: 29429760, heapTotal: 26122752, heapUsed: 7655528 },
{ rss: 33726464, heapTotal: 26122752, heapUsed: 7461968 } ]
JavaScript: цикличные таймеры с автокоррекцией