我有一个这样的Express API应用。
var express = require('express');
const app = express();
app.get('/api', function(req, res) {
res.json({
text: 'my api!'
});
)
});
app.listen(8090, function () {
console.log('App listening on port 8090');
});
我想知道测量响应时间的最准确方法是什么?
答案 0 :(得分:1)
问题是您没有进行任何计算来检查回复所需的时间。基本上,您将立即做出响应。如果您要计算的话,正确的做法就是这样。
var express = require('express');
const app = express();
app.get('/api', function(req, res) {
var start = new Date();
doWork((err) => {
var end = new Date() - start
res.status = 200;
res.end(`It took ${end}ms`);
})
)
});
function doWork(callback) {
// Sleep for 10 seconds
// This can be any logic, not only sleep (sleep in this case is use
// to simulate a function that takes long to respond
setTimeout(function(){callback(null)}, 10000);
}
app.listen(8090, function () {
console.log('App listening on port 8090');
});
您需要知道您想做什么。您不能仅测量请求时间,因为请求时间取决于您将花费多长时间进行计算,因此,如果您没有计算,则没有什么可区别的。因此,使用doWork
我模拟了一个将休眠10秒的函数。您可能想从数据库查询或做一些繁重的数学运算,而不是睡觉,等等。
答案 1 :(得分:1)
您可能还希望在节点(和浏览器)中使用Performance timing API来使用显式衡量性能的API,而不是依赖Date
。除了更具语义的API外,您可能还可以拥有更好的解析度,并且该API将处理类似问题,例如对Date
的“较晚”调用返回的值比“较早”调用的返回值低,因为有人弄乱了系统时间
文档非常不言自明:
const { performance } = require('perf_hooks');
performance.mark('A');
doSomeLongRunningProcess(() => {
performance.mark('B');
performance.measure('A to B', 'A', 'B');
const measure = performance.getEntriesByName('A to B')[0];
console.log(measure.duration);
// Prints the number of milliseconds between Mark 'A' and Mark 'B'
});
OTOH,关于性能测量,尤其是延迟/持续时间测量,完全在测量者的眼中。最准确的方法是在客户端代码中进行度量,并考虑网络延迟,中间处理,框架延迟等情况。
答案 2 :(得分:0)
该功能已由Express提供,并在the reference中进行了说明。
Express使用debug
软件包。可以通过DEBUG
环境变量全局启用调试:
process.env.DEBUG = '*';
或用于Express路由器:
process.env.DEBUG = 'express:router*';
在控制台中记录了每个操作的测量时间:
express:router查询:/ api + 2ms
express:router expressInit:/ api + 1ms
答案 3 :(得分:0)
我发现最好的解决方案(多亏this great tutorial)是使用//Card Struct
//value 1 is ace, 11 is Jack, 12 is Queen, and 13 is King
function Card(suit, value, color){
this.suit = suit,
this.value = value,
this.color = color
}
//Check if two Cards are the same
function cardEq(card1, card2){
if(card1.suit === card2.suit
&& card1.value === card2.value
&& card1.color === card2.color){
return true;
} else {return false;}
}
//Check if two Decks/arrays of Cards are in the same order
function deckEq(deck1, deck2){
let i = 0;
let flag = false;
while (i < 53){
let x = deck1[i];
let y = deck2[i];
if(cardEq(x, y) === true){
flag = true;
i = i + 1;
} else {flag = false; break;}
}
return flag;
}
:
morgan
然后像下面这样在我的代码中使用它:
npm install morgan
答案 4 :(得分:0)
仅使用 node js 的最佳解决方案:
const { performance } = require("perf_hooks");
const t0 = performance.now();
// your code
const t1 = performance.now();
执行时间 = t1 - t0(以毫秒为单位)