fix: 流量波动图Y轴动态适应最近活动,峰值过后自动缩小

- Y轴上限从全量5分钟缓冲改为最近60秒窗口计算
- 解决历史高峰值(如12MB/s下载)导致Y轴长期偏高、
  当前低网速曲线被压到底部无法观察波动的问题
- 峰值滑出60秒窗口后Y轴自动缩小,始终为当前活动提供合适显示比例
This commit is contained in:
2026-07-20 23:23:08 +08:00
parent a12a106791
commit d4627f82d5
+9 -5
View File
@@ -338,13 +338,17 @@ Window {
var ul = root.applet ? root.applet.speedHistoryUpload : [] var ul = root.applet ? root.applet.speedHistoryUpload : []
var n = dl.length var n = dl.length
// ---- Y 轴上限计算(规范 §4.4---- // ---- Y 轴上限计算(动态适应最近活动----
// 1. vMax = 所有采样点 max(download, upload) // 使用最近 60 秒的数据计算 Y 轴上限,而非全量 5 分钟缓冲。
// 2. vMax == 0 时上限取 10241 KB/s)避免除零 // 设计原因:若使用全量缓冲,当历史中存在大流量峰值(如 12MB/s 下载)时,
// 3. 否则取 vMax * 1.2 向上取整到 1/2/5 × 10^n 序列 // 即使当前网速已降至 KB/s 级别,Y 轴仍保持高位,导致当前曲线被压到底部
// 无法观察波动。改用 60 秒窗口后,峰值滑出窗口时 Y 轴自动缩小,
// 始终为当前活动提供合适的显示比例。
var vMax = 0 var vMax = 0
var i var i
for (i = 0; i < n; i++) { var recentWindow = 60 // 秒,Y 轴基于最近 1 分钟的活动计算
var recentStart = Math.max(0, n - recentWindow)
for (i = recentStart; i < n; i++) {
if (dl[i].y > vMax) vMax = dl[i].y if (dl[i].y > vMax) vMax = dl[i].y
if (i < ul.length && ul[i].y > vMax) vMax = ul[i].y if (i < ul.length && ul[i].y > vMax) vMax = ul[i].y
} }