@enableai-job-runtime/scheduler 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @enableai-job-runtime/scheduler v0.0.5
3
+ * (c) 2024-present Enableai
4
+ * @license Proprietary
5
+ **/
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ const SchedulerPriority = {
11
+ "Immediate": 1,
12
+ "1": "Immediate",
13
+ "UserBlocking": 2,
14
+ "2": "UserBlocking",
15
+ "Normal": 3,
16
+ "3": "Normal",
17
+ "Low": 4,
18
+ "4": "Low",
19
+ "Idle": 5,
20
+ "5": "Idle"
21
+ };
22
+
23
+ exports.SchedulerPriority = SchedulerPriority;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @enableai-job-runtime/scheduler v0.0.5
3
+ * (c) 2024-present Enableai
4
+ * @license Proprietary
5
+ **/
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ const SchedulerPriority = {
11
+ "Immediate": 1,
12
+ "1": "Immediate",
13
+ "UserBlocking": 2,
14
+ "2": "UserBlocking",
15
+ "Normal": 3,
16
+ "3": "Normal",
17
+ "Low": 4,
18
+ "4": "Low",
19
+ "Idle": 5,
20
+ "5": "Idle"
21
+ };
22
+
23
+ exports.SchedulerPriority = SchedulerPriority;
@@ -0,0 +1,140 @@
1
+ /**
2
+ * 任务优先级(SchedulerPriority)
3
+ *
4
+ * 描述 Job 在调度过程中所使用的执行优先级。
5
+ *
6
+ * Job Runtime 使用与 React Scheduler 类似的调度思想,但优先级枚举保持独立,
7
+ * 以便在不同环境(浏览器、Node、WASM)灵活映射到底层调度器实现。
8
+ *
9
+ * ⚠️ 优先级仅决定“调度器何时推动下一步 Job.runStep() 执行”。
10
+ * 它不会绕过 Job 内部的 shouldYield(),也不会阻止协作式让权逻辑。
11
+ *
12
+ * 设计目标:
13
+ * - 高优先任务更快轮到
14
+ * - 普通任务保持正常节奏
15
+ * - 低优任务在空闲时慢慢执行
16
+ * - 避免任意 Job 长时间独占主线程
17
+ *
18
+ * 使用建议:
19
+ * - 除非极特殊场景,不推荐使用 Immediate(它无法进行时间片分割)
20
+ * - 大部分业务逻辑使用 Normal 即可
21
+ * - 与用户体验强相关、点击触发的逻辑,可视情况用 UserBlocking
22
+ * - 后台批处理、日志收集等任务建议使用 Low 或 Idle
23
+ */
24
+ export declare enum SchedulerPriority {
25
+ /**
26
+ * 🟥 Immediate — 立即执行(⚠️不建议使用)
27
+ *
28
+ * 特点:
29
+ * - 调度器会优先推进此任务
30
+ * - 可能不进行切分或切分极不充分
31
+ * - 极易造成 UI 卡顿
32
+ *
33
+ * 使用场景(非常少见):
34
+ * - 需要强制同步执行的极短逻辑
35
+ * - 避免被其它任务延迟的关键一瞬逻辑
36
+ *
37
+ * 强烈不推荐:
38
+ * - 多维表格处理
39
+ * - 大型循环
40
+ * - 数据转换
41
+ * - 网络序列任务
42
+ *
43
+ * 如果任务包含任何中等规模逻辑,应避免使用 Immediate,
44
+ * 因为它通常无法“分片执行”,容易阻塞主线程。
45
+ */
46
+ Immediate = 1,
47
+ /**
48
+ * 🟧 UserBlocking — 用户操作相关任务
49
+ *
50
+ * 特点:
51
+ * - 优先级高于普通任务
52
+ * - 仍支持 shouldYield() 协作式让权
53
+ *
54
+ * 推荐场景:
55
+ * - 用户点击触发的数据准备逻辑
56
+ * - UI 交互所需的轻中度处理逻辑
57
+ * - 加载用户刚刚点开的内容结构
58
+ */
59
+ UserBlocking = 2,
60
+ /**
61
+ * 🟨 Normal — 默认优先级
62
+ *
63
+ * 特点:
64
+ * - 绝大多数 Job 建议使用该优先级
65
+ * - 足够快,又不会过份抢占调度时间片
66
+ *
67
+ * 推荐场景:
68
+ * - 多维表格后台运算
69
+ * - 点云/图像/数据预处理
70
+ * - 分页数据计算
71
+ * - 常规业务逻辑任务
72
+ */
73
+ Normal = 3,
74
+ /**
75
+ * 🟦 Low — 次级任务
76
+ *
77
+ * 特点:
78
+ * - 相比 Normal 会更晚被调度
79
+ * - 更适合“可延迟的任务”
80
+ *
81
+ * 推荐场景:
82
+ * - 慢速批处理
83
+ * - 难以感知延迟的逻辑
84
+ * - 模型预热、数据缓存整理等
85
+ */
86
+ Low = 4,
87
+ /**
88
+ * 🟩 Idle — 空闲任务
89
+ *
90
+ * 特点:
91
+ * - 在浏览器空闲时执行
92
+ * - 对交互影响最低
93
+ *
94
+ * 推荐场景:
95
+ * - Stats/日志分析
96
+ * - 底层文件扫描
97
+ * - 数据结构预构建
98
+ * - 图片/缓存/元数据预热
99
+ *
100
+ * 注意:
101
+ * - Idle Job 可能在页面高负载时迟迟不会启动
102
+ * - 适合“能晚点做,但迟早得做一次”的任务
103
+ */
104
+ Idle = 5
105
+ }
106
+ /**
107
+ * 调度器返回的任务句柄。
108
+ *
109
+ * - 对于基于 React Scheduler 的实现,可以包装返回的任务 id;
110
+ * - 对于基于 requestIdleCallback 的实现,可以包装 callback id;
111
+ * - 如果底层调度器不支持取消,可以使用一个 no-op cancel。
112
+ */
113
+ export interface SchedulerTask {
114
+ cancel(): void;
115
+ }
116
+ /**
117
+ * 调度器接口。
118
+ *
119
+ * Job 只依赖该接口,不依赖具体实现。
120
+ */
121
+ export interface Scheduler {
122
+ /**
123
+ * 按指定优先级调度一个回调。
124
+ * 返回的 SchedulerTask 用于后续取消。
125
+ */
126
+ schedule(priority: SchedulerPriority, fn: () => void): SchedulerTask;
127
+ /**
128
+ * 取消一个未执行完的任务。
129
+ */
130
+ cancel(task: SchedulerTask): void;
131
+ /**
132
+ * 当前时间片是否应当让出控制权。
133
+ *
134
+ * - 在浏览器环境通常由 React Scheduler 或时间片实现决定;
135
+ * - 在简单实现中,也可以始终返回 false。
136
+ */
137
+ shouldYield(): boolean;
138
+ }
139
+
140
+
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @enableai-job-runtime/scheduler v0.0.5
3
+ * (c) 2024-present Enableai
4
+ * @license Proprietary
5
+ **/
6
+ const SchedulerPriority = {
7
+ "Immediate": 1,
8
+ "1": "Immediate",
9
+ "UserBlocking": 2,
10
+ "2": "UserBlocking",
11
+ "Normal": 3,
12
+ "3": "Normal",
13
+ "Low": 4,
14
+ "4": "Low",
15
+ "Idle": 5,
16
+ "5": "Idle"
17
+ };
18
+
19
+ export { SchedulerPriority };
package/index.js ADDED
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ if (process.env.NODE_ENV === 'production') {
4
+ module.exports = require('./dist/scheduler.cjs.prod.js')
5
+ } else {
6
+ module.exports = require('./dist/scheduler.cjs.js')
7
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@enableai-job-runtime/scheduler",
3
+ "version": "0.0.5",
4
+ "order": -1,
5
+ "description": "",
6
+ "main": "index.js",
7
+ "types": "dist/scheduler.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "index.js"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/scheduler.d.ts",
15
+ "module": "./dist/scheduler.esm-bundler.mjs",
16
+ "import": "./dist/scheduler.esm-bundler.mjs",
17
+ "require": "./index.js"
18
+ },
19
+ "./*": "./*"
20
+ },
21
+ "buildOptions": {
22
+ "name": "scheduler",
23
+ "formats": [
24
+ "esm-bundler",
25
+ "cjs"
26
+ ]
27
+ },
28
+ "keywords": [],
29
+ "license": "Proprietary"
30
+ }