Подтвердить что ты не робот

Безопасен ли console.time() в node.js?

У меня есть небольшой фрагмент кода node.js передо мной, который выглядит так:

console.time("queryTime");
doAsyncIOBoundThing(function(err, results) {
    console.timeEnd("queryTime");
    // Process the results...
});

И, конечно, когда я запускаю это на моей (иначе простаивающей) системе разработки, я получаю приятное консольное сообщение, подобное этому:

queryTime: 564ms

Однако, если я введу это в производство, не будет ли, вероятно, одновременно выполняться несколько асинхронных вызовов, и каждый из них перезапишет предыдущий таймер? Или node имеет какой-то магический контекст выполнения, который дает каждому "потоку выполнения" отдельное пространство имен таймера консоли?

4b9b3361

Ответ 1

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

Причина этого довольно проста: console.time и console.timeEnd являются одной из простейших функций мира (source):

Console.prototype.time = function(label) {
  this._times.set(label, Date.now());
};


Console.prototype.timeEnd = function(label) {
  var time = this._times.get(label);
  if (!time) {
    throw new Error('No such label: ' + label);
  }
  var duration = Date.now() - time;
  this.log('%s: %dms', label, duration);
};

Пока вы случайно не используете ярлык дважды, все будет работать точно так, как предполагалось. Также обратите внимание, что node имеет обычно только один поток выполнения.

Ответ 2

Не будет ли этот простой код работать?

var labelWithTime = "label " + Date.now();
console.time(labelWithTime);
// Do something
console.timeEnd(labelWithTime);