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.

2 Коментара по “setTimeout неточност”

  1. Alek:

    Izvod - ne polzvai JavaScript za realtime prilojenia :)

  2. Петьо:

    За анимации става, преживява се неточността.

Коментирай