Files
DCU_DesktopController/docs/compose/spec/revisions/tab-keepalive_REV_2026-10-19.html
T

26 lines
5.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>tab-keepalive.md 修订附录 2026-10-19</title><style>
body{font-family:-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;margin:0;background:#f5f6f8;color:#1d2330;line-height:1.6}
.wrap{max-width:1180px;margin:0 auto;padding:28px 24px 60px}
h1{font-size:26px;margin:0 0 6px}h2{font-size:20px;margin:36px 0 12px;padding-bottom:6px;border-bottom:2px solid #d9dee8}
h3{font-size:16px;margin:22px 0 8px}
.meta{color:#5b6476;font-size:13px}
.card{background:#fff;border:1px solid #e1e5ec;border-radius:10px;padding:16px 18px;margin:12px 0}
table{border-collapse:collapse;width:100%;background:#fff;font-size:13px;margin:8px 0}
th,td{border:1px solid #e1e5ec;padding:6px 8px;vertical-align:top;text-align:left}
th{background:#eef1f6;font-weight:600}
code{font-family:Consolas,Menlo,monospace;font-size:12px;background:#f0f2f6;padding:1px 4px;border-radius:3px;word-break:break-all}
.sev{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;font-weight:600;color:#fff;white-space:nowrap}
.s0{background:#b3261e}.s1{background:#e8710a}.s2{background:#3367d6}.s3{background:#5f6b7a}
.kpis{display:flex;gap:12px;flex-wrap:wrap}.kpi{flex:1;min-width:130px;background:#fff;border:1px solid #e1e5ec;border-radius:10px;padding:12px 14px}
.kpi b{display:block;font-size:26px}
.issue{background:#fff;border:1px solid #e1e5ec;border-left:5px solid #ccc;border-radius:8px;padding:12px 16px;margin:10px 0}
.issue.s0b{border-left-color:#b3261e}.issue.s1b{border-left-color:#e8710a}.issue.s2b{border-left-color:#3367d6}.issue.s3b{border-left-color:#5f6b7a}
.issue h4{margin:0 0 6px;font-size:15px}.issue dl{margin:0;display:grid;grid-template-columns:72px 1fr;gap:3px 10px;font-size:13px}
.issue dt{color:#5b6476}.issue dd{margin:0}
.st{white-space:nowrap;font-weight:600}.st-ok{color:#1e7e34}.st-part{color:#b26a00}.st-open{color:#b3261e}.st-na{color:#5f6b7a}.st-old{color:#6b4fbb}
pre.arch{background:#1f2430;color:#e6e9ef;padding:14px;border-radius:8px;overflow:auto;font-size:12.5px;line-height:1.45}
a{color:#2457c5}
.note{font-size:12.5px;color:#5b6476}
</style></head><body><div class="wrap"><h1>《tab-keepalive.md》修订附录 2026-10-19</h1><div class="meta"><a href="../tab-keepalive.md">原报告</a> · 核对基线 commit <code>eac3717</code> · 总评审:<a href="../../../review/DCU_DesktopController_专家评审_2026-10-19.html">DCU_DesktopController_专家评审_2026-10-19.html</a></div><div class="card"><b>原报告:</b>Tab Keep-Alive(多 iframe 常驻)<br><b>时间线:</b>status: delivered,2026-09-16(eaafee1 / be26f4d)<br><b>原结论概要:</b>tabs.html 一标签一懒创建 iframe,visibility 切换不销毁文档;注入的 F5/⟳ 只刷新激活帧;明确不做后台降频。<p class="note">原文件保持不变;本附录逐条记录其结论在当前代码中的状态。</p></div><h2>逐条结论跟踪</h2><table><tr><th>编号</th><th>原结论 / 建议</th><th>当前状态</th><th>证据(文件:行号)</th><th>备注</th></tr><tr><td>TK-1</td><td>多 iframe 宿主 + visibility 切换</td><td class="st st-ok">已修复(已交付)</td><td><code>tabs.html:70-81, 100, 113</code></td><td></td></tr><tr><td>TK-2</td><td>F5/⟳ 只 reload .page-frame.active</td><td class="st st-ok">已修复(已交付)</td><td><code>esp32_server.py:126, 150, 166</code></td><td></td></tr><tr><td>TK-3</td><td>不做后台页降频(Out of Scope)</td><td class="st st-open">仍存在风险</td><td><code>tabs.html:76-81; js/common/polling.js:350-352</code></td><td>隐藏帧持续轮询挤占设备 6 个 socket(C-13);电机页发送节拍在后台被节流(M-10)——建议重新评估此决策</td></tr></table><h2>相关新问题(详见总评审)</h2><div class="issue s1b" id="M-10"><h4><span class="sev s1">严重</span> [M-10] 周期发送与序列计时在后台标签被节流,且无可见性处理</h4><dl><dt>模块</dt><dd>电机控制/故障保护</dd><dt>位置</dt><dd><code>js/motor/main.js:2488; js/motor/seq.js:503</code></dd><dt>现象</dt><dd>周期发送用主线程 setInterval,序列保持用 setTimeout;隐藏 iframe/最小化后被浏览器降到 ≥1 s 乃至分钟级。只有状态轮询走 Worker。无 visibilitychange 停止/告警;WiFi 链路关窗时无停机。</dd><dt>风险</dt><dd>后台时控制节拍严重失真,序列时间轴不可预测。</dd><dt>修改建议</dt><dd>发送节拍迁入 tick.worker.js;visibilitychange 时提示或按策略安全停机;pagehide 时对 WiFi 也发停机(sendBeacon)。</dd></dl></div><div class="issue s2b" id="C-13"><h4><span class="sev s2">一般</span> [C-13] 对设备的并发轮询过多</h4><dl><dt>模块</dt><dd>CAN/公共层</dd><dt>位置</dt><dd><code>js/common/device-link.js:30; js/can.js:131, 424; js/can_monitor.js:487, 490; tabs.html:76-81; js/common/polling.js:350-352</code></dd><dt>现象</dt><dd>/system/status 被 Owner(1 Hz)、OTA 页(1 Hz)、can.js(5 s)、can_monitor(5 s) 同时轮询;/can/feedback 被抽屉与独立监控页各 1 Hz;隐藏 iframe 继续轮询,无可见性暂停与离线退避。README 称设备 httpd 仅 6 个 socket 且 lru_purge。</dd><dt>风险</dt><dd>连接被挤占驱逐,业务请求失败。</dd><dt>修改建议</dt><dd>状态统一由 Owner 广播;隐藏页暂停;离线指数退避。</dd></dl></div><h2>结论</h2><div class="card">共 3 条:已修复 2、部分修复 0、仍存在/存疑 1、已过时 0、无法在本仓库核实 0。</div></div></body></html>