setTimeout неточност
На нищо не може да разчита човек в днешни дни. Заиграх се с малка проверка на setTimeout функцията:
function tick()
{
document.body.innerHTML += ( (new Date()).getTime()) - d.getTime() + "<br />";
}
var d = new Date();
setTimeout(tick, 10);
След което се набрах на F5. Резултатите под IE 6, FF 1.5 и Opera 8.5 са еднакво неточни - 16, 31, 15, 32, 46… понякога стига и до 62, 63. Очевидно вътрешния механизъм тиктака на интервали и чат-пат ‘фърля закачени със setTimeout или setInterval действия. Нямаш обаче гаранция за кой тик ще ти дойде реда да те изпълнят. Интересното е, че дори и при високи стойности (1000, 2000) неточността пак се проявява.
Друг тест:
var i = 0;
var d = new Date();
function traceTime()
{
var d2 = new Date();
document.body.innerHTML += d2.getTime() - d.getTime() + "<br />";
d = new Date();
i ++;
if (i > 100)
{
clearInterval(pt);
}
}
var pt = setInterval(function () {traceTime()}, 10);
Тук нещата са малко по-постоянни. Макар че операта пак не сколасва винаги. Поиграх си малко, най-добри резултати дава с 17 - общо взето резултатите са постоянно 31 и 32.
Март 25th, 2006 at 6:58 pm
Izvod - ne polzvai JavaScript za realtime prilojenia
Март 26th, 2006 at 12:33 pm
За анимации става, преживява се неточността.