From ca6f4c510c8c71f3f8745fe110aa4d65f6a2e4a7 Mon Sep 17 00:00:00 2001
From: JianFeeeee
Date: Sun, 20 Sep 2026 10:39:53 +0800
Subject: [PATCH] =?UTF-8?q?feat(site):=20priority=20=E5=9B=BE=E8=A1=A5?=
=?UTF-8?q?=E4=B8=8A=E3=80=8C=E6=8E=92=E9=98=9F=E8=BE=93=E5=85=A5=E3=80=8D?=
=?UTF-8?q?=E8=BF=99=E4=B8=80=E7=B1=BB=EF=BC=88=E7=94=A8=E6=88=B7=E6=8C=87?=
=?UTF-8?q?=E5=87=BA=E7=9A=84=E6=BC=8F=E9=A1=B9=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 漏项
文案写「输入走两条路」,但图上只有 L1–L4 —— **排队的完全没出现**。
源码 `scheduler.go` 开篇就写明是**两类别**:
- TaskInterrupt(InjectInterrupt*):带 L1..L4,可抢占
- TaskQueued(InjectText*/InjectInputSync*):**无级别**,可被任何中断打断
「级别只属于中断」是这套调度模型的关键一句,图里不表达就等于漏了一半。
## 改法
图改成左右两列,标题直接写清差异:
中断 · 带级别 排队 · 无级别
├ L4 内核独占 ├ 队列条(先到先处理)
├ L3 需及时处理 └ 任何中断都能插它前面
├ L2 消息类 │
└ L1 完全可等 │
└───────────┬──────────────┘
正在跑的任务
- 排队列用**虚线框 + 素色条**(不发光),与左侧的实线发光级别条刻意区分 ——
「无级别」这件事本身就该在视觉上体现
- 两路汇入「正在跑的任务」,并标注「同一时刻只一个」
## 顺带修的两处
- **浅色下排队条看不见**:原先复用 `gCard`,而浅色下 gCard 是白的,
白底白条等于没画。改用独立的 `--dv-queue-item` 令牌
- **横向虚线穿过队列条**:原想表达「处理方向」,结果画在了条内部。
改为右侧竖线 + 向下箭头
## 验证
- 双主题:控制台错误 0、横向溢出 0、图元零越界
- 一滑一页仍生效;JS 禁用 24/24 可见;reduce 下吸附停用
- 390/768/1440 溢出均 0
---
site/index.html | 99 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 64 insertions(+), 35 deletions(-)
diff --git a/site/index.html b/site/index.html
index 28cc11c..2c81e11 100644
--- a/site/index.html
+++ b/site/index.html
@@ -69,6 +69,9 @@
--fig-inner-bottom: rgba(0, 0, 0, 0.35);
--fig-glow: rgba(56, 189, 248, 0.10);
--fig-grain: 0.16;
+ /* 排队列:不能直接用 gCard —— 浅色下 gCard 是白的,
+ 在白色玻璃面板上等于看不见。给一个独立色调。 */
+ --dv-queue-item: rgba(119, 128, 154, 0.22);
--code-bg: rgba(6, 10, 22, 0.85);
--code-fg: #cdd3f5;
--nav-bg: rgba(7, 11, 22, 0.72);
@@ -106,6 +109,7 @@
--fig-inner-bottom: rgba(15, 23, 42, 0.06);
--fig-glow: rgba(37, 99, 235, 0.08);
--fig-grain: 0.08;
+ --dv-queue-item: rgba(37, 99, 235, 0.13);
--text: #0d1526;
--text-dim: #48546c;
--text-muted: #78849a;
@@ -601,6 +605,21 @@
text-anchor: middle;
letter-spacing: 0.08em;
}
+ /* 排队类:无级别,用虚线框 + 不发光,与中断类刻意拉开 */
+ .dv-queue {
+ fill: none;
+ stroke: var(--border);
+ stroke-width: 1.3;
+ stroke-dasharray: 5 4;
+ }
+ .dv-qitem { fill: var(--dv-queue-item); opacity: 0.95; }
+ /* 处理方向指示 */
+ .dv-qdir { fill: none; stroke: var(--text-muted); stroke-width: 1.2; opacity: 0.6; }
+ .dv-qdir-tip { fill: none; stroke: var(--text-muted); stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; opacity: 0.6; }
+ /* 两列标题 */
+ .dv-colcap { fill: var(--text-dim); font-size: 10px; text-anchor: middle; letter-spacing: 0.04em; }
+ .dv-colcap-dim { fill: var(--text-muted); }
+ .dv-caps { fill: var(--text-muted); font-size: 8.8px; text-anchor: middle; }
@media (prefers-reduced-motion: no-preference) {
.dv-pkdot { animation: pkPulse 1.8s ease-in-out infinite; }
@keyframes pkPulse {
@@ -1877,52 +1896,62 @@
-