Эффективный секундомер - PullRequest
6 голосов
/ 04 августа 2011

Привет, я программирую утилиту секундомера в javascript, и у меня есть вопрос об эффективности и накладных расходах.Существует два способа создания секундомера:

1. Сохраните дату начала и постоянно измеряйте количество миллисекунд, прошедших с этой даты.

2. Создайте целое число и приращениеего значение с заданным интервалом.

Я хочу знать, какой из них наиболее эффективен.Кроме того, я не уверен, что вариант № 2 будет очень точным, если у кого-то есть какие-либо комментарии по этому поводу, которые также были бы удивительными.

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Как уже говорили другие, идите с # 1. Если вам нужны часы, которые тикают каждую секунду (или минуту, или что-то еще), вы должны оценить время до следующего «тика», чтобы setTimeout вызывалось через несколько мс после нужного времени, например, бежать сразу после следующей секунды:

var d = new Date();
var interval = 1020 - d.getMilliseconds();
setTimeout(fn, interval);

Таким образом, если выполнение одного вызова задерживается из-за занятости системы, следующий вызов все равно должен вызываться через 20 мс после следующей целой секунды.

3 голосов
/ 04 августа 2011

Вариант 2 не будет точным, особенно если у вас есть страница с дополнительным JavaScript для других целей. Перейти с первого подхода.

...