cs - Client Start,表示客户端发起请求
sr - Server Receive,表示服务端收到请求
ss - Server Send,表示服务端完成处理,并将结果发送给客户端
cr - Client Received,表示客户端获取到服务端返回信息
sr-cs 当前http请求的网络延迟
ss-sr 当前服务端请求的时间消耗
cr-cs 当前http请求从客户端发起到服务端响应的总时间消耗
1:请求从发起到结束整个总耗时traceDuration计算方式为:
export function traceDuration(spans) {
function makeList({timestamp, duration}) {
if (!timestamp) {
return [];
} else if (!duration) {
return [timestamp];
} else {
return [timestamp, timestamp + duration];
}
}
// turns (timestamp, timestamp + duration) into an ordered list
const timestamps = _(spans).flatMap(makeList).sort().value();
if (timestamps.length < 2) {
return null;
} else {
const first = _.head(timestamps);
const last = _.last(timestamps);
return last - first;
}
}
例子:
long a = Long.valueOf("1502351905261000")+226587;
long b = Long.valueOf("1502351905407000")+41000;
long c = Long.valueOf("1502351905488000")+47;
long d = Long.valueOf("1502351905445000")+45;
java.util.List list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(Long.valueOf("1502351905261000"));
list.add(Long.valueOf("1502351905407000"));
list.add(Long.valueOf("1502351905488000"));
list.add(Long.valueOf("1502351905445000"));
Collections.sort(list);
System.out.println(list.get(list.size()-1)-list.get(0));
2:获取请求的总耗时
export function totalServiceTime(stamps, acc = 0) {
const filtered = stamps.filter((s) => s.duration);
if (filtered.length === 0) {
return acc;
} else {
const ts = _(filtered).minBy((s) => s.timestamp);
const [current, next] = _(filtered)
.partition((t) =>
t.timestamp >= ts.timestamp
&& t.timestamp + t.duration <= ts.timestamp + ts.duration)
.value();
const endTs = Math.max(...current.map((t) => t.timestamp + t.duration));
return totalServiceTime(next, acc + (endTs - ts.timestamp));
}
}
例子:
- {name: "security", timestamp: 1502351905261000, duration: 226587}
- {name: "security", timestamp: 1502351905407000, duration: 41000}
- {name: "security", timestamp: 1502351905488000, duration: 47}
- {name: "security", timestamp: 1502351905445000, duration: 45}
第一步:找到
timestamp
最小的为:ts={
name
:
"security"
,
timestamp
:
1502351905261000
,
duration
:
226587
}
第二步:满足这个条件的:
t.timestamp >= ts.timestamp
&& t.timestamp + t.duration <= ts.timestamp + ts.duration
为
current
数据:
{
name
:
"security"
,
timestamp
:
1502351905261000
,
duration
:
226587
}
{
name
:
"security"
,
timestamp
:
1502351905407000
,
duration
:
41000
}
{
name
:
"security"
,
timestamp
:
1502351905445000
,
duration
:
45
}
其他的为next数据:
{
name
:
"security"
,
timestamp
:
1502351905488000
,
duration
:
47
}
第三步:根据
current
数据算出
endTs = Math.max(...current.map((t) => t.timestamp + t.duration));
第四步:根据上一步得到的endTs和第一步得到的ts计算acc + (endTs - ts.timestamp)
第五步:根据第二步得到的current数据和上一步得到数据进行的递归
totalServiceTime(next, acc + (endTs - ts.timestamp))