Производительность - Date.now() vs Date.getTime()
var timeInMs = Date.now();
per MDN
против.
var timeInMs = new Date(optional).getTime();
per MDN.
Есть ли разница между этими двумя, помимо синтаксиса и возможностью установки даты (не текущей) через опцию во второй версии?
Date.now() быстрее - проверьте jsperf
Ответы
Ответ 1
Все эти вещи одинаковы (редактирование семантически, производительность немного лучше с .now()
):
var t1 = Date.now();
var t2 = new Date().getTime();
Однако значение времени из любого уже созданного экземпляра Date
замерзает во время его построения (или в любое время/дату, когда оно установлено). То есть, если вы это сделаете:
var now = new Date();
а затем подождите некоторое время, последующий вызов now.getTime()
будет указывать время в точке, в которой была установлена переменная.
Ответ 2
Они эффективно эквивалентны, но вы должны использовать Date.now()
. Это яснее и примерно в два раза быстрее.
Изменить: Источник: http://jsperf.com/date-now-vs-new-date
Ответ 3
Когда вы выполняете (new Date()).getTime()
, вы создаете новый объект Date. Если вы сделаете это повторно, это будет примерно в 2 раза медленнее, чем Date.now()
Тот же принцип должен применяться для Array.prototype.slice.call(arguments, 0)
vs [].slice.call(arguments, 0)
Ответ 4
Да, это правильно; они эффективно эквивалентны при использовании текущего времени.
Ответ 5
Иногда предпочтительнее сохранять некоторую переменную отслеживания времени в формате объекта Date, а не как просто миллисекунды, чтобы иметь доступ к методам Date без повторной инстанцирования. В этом случае Date.now() все еще выигрывает новую дату() или тому подобное, но только примерно на 20% на моем Chrome и на крошечную сумму в IE.
Смотрите мой JSPERF на
timeStamp2.setTime(Date.now()); // set to current;
против.
timeStamp1 = new Date(); // set to current;
http://jsperf.com/new-date-vs-settime