58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
## 删除"断线后切换慢速轮询"机制
|
||||
|
|
|
|||
|
|
**文件:** `G:\Robot_v2\DCU\ESP32_COMM\tools\app.js`
|
|||
|
|
|
|||
|
|
**范围:** 只删除"降速到 10s"的行为,保留 5 次失败触发的网络诊断(diagnoseNetwork)和断线 UI 提示。删除后断线时保持 1s 轮询,仅显示"未连接"并按需做网络诊断。
|
|||
|
|
|
|||
|
|
### 改动点
|
|||
|
|
|
|||
|
|
1. **删除变量 `pollSlowMode`(1600 行)**
|
|||
|
|
- 移除 `var pollSlowMode = false; // 降速模式(10s 一次)`
|
|||
|
|
|
|||
|
|
2. **删除函数 `slowDownPolling()`(1671-1681 行)**
|
|||
|
|
- 整个函数移除
|
|||
|
|
|
|||
|
|
3. **删除函数 `restorePolling()`(1682-1695 行)**
|
|||
|
|
- 整个函数移除(保留 `startPolling`、`pausePollingForUpload`、`resumePollingAfterUpload`)
|
|||
|
|
|
|||
|
|
4. **简化 `startPolling()`(1662-1670 行)**
|
|||
|
|
- 删除 `pollSlowMode = false;` 这一行(其余保留)
|
|||
|
|
|
|||
|
|
5. **简化 `resumePollingAfterUpload()`(1714 行)**
|
|||
|
|
- `statusPollIntervalMs = pollSlowMode ? 10000 : 1000;` → `statusPollIntervalMs = 1000;`
|
|||
|
|
|
|||
|
|
6. **简化 `pollStatus()` 成功分支(1738-1747 行)**
|
|||
|
|
- 移除 `wasSlow` / `restorePolling()` 调用,仅保留 `consecutivePollFailures = 0;`(保留"恢复在线"的 toast 体验需要另判断;改为:若 `consecutivePollFailures > 0` 则提示已恢复并清零)
|
|||
|
|
|
|||
|
|
7. **简化 `pollStatus()` 失败分支的 5-fail 块(1789-1800 行)**
|
|||
|
|
- 删除 `!pollSlowMode` 条件判断中的 `pollSlowMode` 部分
|
|||
|
|
- 删除 `slowDownPolling();` 调用和"已切换为慢速轮询"日志
|
|||
|
|
- 保留 `diagnoseNetwork()` 诊断、`updateConnectionUi(false, '未连接')`、`applyDisconnectedRuntimeState()` 和诊断文本显示
|
|||
|
|
|
|||
|
|
8. **简化 `pollStatus()` 失败分支末尾(1828 行)**
|
|||
|
|
- `} else if (!pollSlowMode) {` → `} else {`(该 else 分支总是显示未连接状态)
|
|||
|
|
|
|||
|
|
9. **清理 `testConnection()`(817-820 行)**
|
|||
|
|
- 删除 `if (pollSlowMode) { addLog(...); restorePolling(); }` 块
|
|||
|
|
|
|||
|
|
10. **清理 `refreshSystemStatusNow()`(874 行)**
|
|||
|
|
- 删除 `if (pollSlowMode) restorePolling();`
|
|||
|
|
|
|||
|
|
11. **清理 `visibilitychange` 监听(1854-1855 行)**
|
|||
|
|
- 删除 `// 之前若在慢速模式...` 注释和 `if (pollSlowMode) restorePolling();`
|
|||
|
|
|
|||
|
|
12. **清理 IP 输入 change 监听(1887-1892 行)**
|
|||
|
|
- 简化为:IP 变化时清零失败计数并立即拉一次状态(不再依赖 restorePolling)
|
|||
|
|
- 或直接移除 `if (pollSlowMode) { ... restorePolling(); }` 块,保留监听器做基本的失败计数清零
|
|||
|
|
|
|||
|
|
### 不删除的部分
|
|||
|
|
- `consecutivePollFailures` 变量及其计数逻辑(诊断仍需要)
|
|||
|
|
- `diagnoseNetwork()` 网络诊断函数
|
|||
|
|
- `lastDiagTime` / `diagResult` 诊断状态变量
|
|||
|
|
- `applyDisconnectedRuntimeState()` 断线 UI 更新
|
|||
|
|
- `statusPollIntervalMs` 变量(被 upload 暂停/恢复机制复用,保持 1000 默认值)
|
|||
|
|
|
|||
|
|
### 验证
|
|||
|
|
- 浏览器打开 `tools/index.html`,确认页面加载无 JS 错误
|
|||
|
|
- 模拟 ESP32 断线:连续 5 次失败后应仍触发网络诊断并显示"未连接",但轮询间隔保持 1s
|
|||
|
|
- 恢复 ESP32:应清零失败计数并提示"恢复在线"
|