Javascript - Можете ли вы повторно использовать объекты Date ()? - PullRequest
6 голосов
/ 13 октября 2011

Можно ли создать новый объект Date (), чтобы получить текущую дату, а затем позже, через определенный промежуток времени, повторно использовать тот же объект Date (), чтобы получить новое текущее время?

Похоже, вам нужно создавать новый объект Date каждый раз, когда вы хотите текущую дату / время.

В моем конкретном приложении я хочу запустить анимацию, и для каждого отдельного кадра анимации мне нужно узнать текущее время. Поэтому создание нового объекта Date для каждого отдельного кадра (потенциально для 1000 кадров?) Со временем будет только увеличивать использование памяти.

Есть какие-нибудь подсказки на этом?

Ответы [ 4 ]

5 голосов
/ 13 октября 2011

Если вы не храните их по отдельности, ваши объекты даты автоматически удаляются мусором. Более того, вы можете сохранять текущую дату в одной и той же переменной на каждой итерации и не беспокоиться о расцвете памяти.

Например:

var current = new Date()
for (var idx = 0; idx <= frameCount; ++idx) {
    current = new Date();

      // Do processing...
}

В этом случае вы не используете все больше и больше памяти, потому что старая дата будет собираться мусором после перезаписи.

2 голосов
/ 13 октября 2011

Если вы на самом деле не хотите указывать дату, а скорее время в миллисекундах, используйте Date.now(), чтобы вам не нужно было создавать объект Date.

var t = Date.now(); // 1318479105311

Вы можете добавить его в старые браузеры с помощью:

if( !Date.now ) Date.now = function(){ return +(new Date); };
0 голосов
/ 13 октября 2011

Современные браузеры имеют метод Date.now(), который возвращает время эпоха без создания объекта. IE есть с версии 9.

Я не уверен, что это даст много преимуществ, хотя создание объекта довольно дешево. Как отметил @icktoofay, если вы не будете хранить старые даты, они будут собирать мусор.

edit: вот тест для обоих . Date.now фактически в два раза быстрее в Chrome, но, находясь в зоне> 3 МГц, я не думаю, что это будет иметь значение для анимации.

0 голосов
/ 13 октября 2011

Если у вас современный браузер, вызовите

Date.now()

, который возвращает число, содержащее время эпохи.

Числа в JavaScript являются примитивами, поэтому вы не создаете никаких новых объектов.Но, как говорили другие, новые объекты не слишком важны.

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

...