refactor(motor): P1 拆分 main.js + 收敛连接/总线状态机

R4 外提 scope/ota/seq/conn-poll;R5 waitVersion/queryNodeIdParam 下沉
transport;R6 ecat-bus 单点 bootstrap;R7 toast-stack + utils 去重。
main.js 4647→~1894 行。?v= 已 bump 20260924a。
This commit is contained in:
cbb
2026-09-21 02:26:39 +08:00
parent b70f5ed0d6
commit 261caf50b7
14 changed files with 3470 additions and 3523 deletions
+9 -13
View File
@@ -12,7 +12,10 @@
* 复用的函数(通过 window.* 引用):
* window.getBaseUrl / window.updateSystemStatusUi / window.formatPercent
*/
import { formatBytes, formatTime, formatUptime, escapeHtml } from './utils.js';
import {
formatBytes, formatTime, formatUptime, escapeHtml,
setTextIfChanged, setClassIfChanged, setQuietMode,
} from './utils.js';
import { addLog } from './log.js';
import { showToast } from './toast.js';
import {
@@ -20,6 +23,10 @@ import {
} from './heap-low-history.js';
import { deviceLink } from './device-link.js';
/* R7:setQuietMode / setTextIfChanged / setClassIfChanged 全仓唯一实现在 utils.js。
* 此处 re-export setQuietMode,保持既有 `import { setQuietMode } from './connection.js'` 可用。 */
export { setQuietMode };
// ==================== 渲染缓存(性能) ====================
// /system/status 每 1s(中继期 400ms)刷一次 UI。此前每轮全量 innerHTML 重建
// CPU/任务栈列表 + 无条件写几十个节点,引发周期性样式重算/重排/重绘掉帧。
@@ -40,12 +47,6 @@ function setTextById(id, value) {
var v = String(value);
if (el.textContent !== v) el.textContent = v;
}
function setClassIfChanged(el, cls) {
if (el && el.className !== cls) el.className = cls;
}
function setTextIfChanged(el, txt) {
if (el && el.textContent !== txt) el.textContent = txt;
}
/** 写前比较的宽度更新:用元素上的 _lastW 缓存避免读回 style 字符串。 */
function setWidthIfChanged(el, widthStr) {
if (el && el._lastW !== widthStr) {
@@ -59,13 +60,8 @@ function setWidthIfChanged(el, widthStr) {
* 无设备静默态:设备离线且没有传输在跑时,给 <html> 挂 data-dcu-calm="1",
* 由 responsive.css 统一掐掉常驻动画。160Hz 屏上这些动效每帧触发重算+重绘,
* 实测未接设备时 renderer+GPU 各占约一核的七成。
* (实现在 js/common/utils.js,见文件头注释。)
*/
export function setQuietMode(quiet) {
var v = quiet ? '1' : '0';
if (document.documentElement.dataset.dcuCalm !== v) {
document.documentElement.dataset.dcuCalm = v;
}
}
/** 本轮是否有传输/OTA 在跑(此时即使设备短暂不响应也要保留动效)。 */
function transferOngoing() {