2014-09-05 2 views
1

Я использую библиотеку mikeal/request для доступа к WebAPI. Я хотел бы войти в консоль времени выполнения каждого запроса.node.js + mikeal/request - как измерить время запроса?

У меня есть несколько и вложенные запросы, так что я не хочу, чтобы положить в каждую одну: var start = Date.now(); ... var time = Date.now() - start; console.log('Finished in '+time+' ms');

Я желаю была возможность сделать что-то вроде этого: requestWithDefaults = request.defaults({ ... startTime: null }); requestWithDefaults.on('request.prepare', function() { startTime = Date.now(); }); requestWithDefaults.on('request.finished', function() { var time = Date.now() - startTime; console.log('Finished in '+time+' ms'); });

Но я не знаю, как зацепиться за эти моменты. Это как-то возможно в простой форме?

ответ

1

Если вы хотите просто записать продолжительность какого-либо процесса, вы можете использовать встроенные функции Node.js console.time() и console.timeEnd(). Вы можете check out the Node console docs here.

Вы можете написать небольшой модуль, чтобы обернуть функциональность запросов и добавить в console.time [End] заявления, которые могли бы выглядеть следующим образом:

var request = require('request'); 

module.exports = { 
    get: function(url, next) { 
     // start console timer 
     console.time(url); 
     request.get(url, function() { 
      // end console timer 
      console.timeEnd(url); 
      next.apply(this, arguments); 
     }); 
    } 
}; 

Вы бы затем включить этот модуль вместо модуля запроса непосредственно и что даст вам этот журнал по умолчанию. Примечание. Это только пример запросов GET, остальные могут быть построены.

Это выдает в формате [label]: 475ms. Настолько милый и очень чистый, чтобы показать, сколько мс требуется для завершения чего-либо. Это не даст вам приятных возможностей форматирования from moment.js, но это, безусловно, просто.

+0

Благодарим за быстрый ответ. console.time/timeEnd - довольно интересное решение (я этого не знал), но главной проблемой для меня является то, как подключиться в эти моменты подготовки запроса и его завершения. События request.prepare и request.finished являются гипотетическими и имеют мое желание. Я не знаю, как с ними справиться. – Rympau

+0

@Rympau Я просмотрел исходный код модуля запроса, и похоже, что для запроса на запуск или конечного запроса нет реальных хороших крючков событий (кроме конечного события, если нет обратного вызова). Поэтому, если бы это был я, я бы написал действительно тонкий модуль, чтобы обернуть модуль запроса и самостоятельно выпустить эти события, а затем убедиться, что все взаимодействие с модулем запроса проходит через этот модуль обертки. – jasonmerino

+0

Благодарим вас за проверку запроса и идеи. Я постараюсь написать тонкий модуль, но из-за того, что у меня нет знаний, я буду благодарен за любой намек. – Rympau

Смежные вопросы