Безопасен ли console.time() в node.js?
У меня есть небольшой фрагмент кода node.js передо мной, который выглядит так:
console.time("queryTime");
doAsyncIOBoundThing(function(err, results) {
console.timeEnd("queryTime");
// Process the results...
});
И, конечно, когда я запускаю это на моей (иначе простаивающей) системе разработки, я получаю приятное консольное сообщение, подобное этому:
queryTime: 564ms
Однако, если я введу это в производство, не будет ли, вероятно, одновременно выполняться несколько асинхронных вызовов, и каждый из них перезапишет предыдущий таймер? Или node имеет какой-то магический контекст выполнения, который дает каждому "потоку выполнения" отдельное пространство имен таймера консоли?
Ответы
Ответ 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);