state/CHANGELOG.md
2026-06-05 19:16:52 +08:00

129 lines
8.2 KiB
Markdown
Raw Permalink 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.

# CHANGELOG
## v1.0.14 (2026-06-05)
### 修复
- **微任务扫描死循环**: 引入 `_stScanned` 标记对新挂载节点进行幂等拦截,防止在复杂嵌套(如 `$if` / `$each`)及大数据量场景下,新老节点重组重排循环触发 MutationObserver 造成浏览器卡死的微任务无限扫描死循环。
- **状态更新防御**: 在 `_updateBinding` 逻辑中加入同值校验,避免当目标值与原值相等时重复赋值,杜绝不必要的 Observer 触发与重绘。
## v1.0.13 (2026-05-26)
### 新特性
- **双重计算指令 ($$)**: 引入了 `$$` 前缀指令支持(如 `$$if`, `$$each`, `$$text` 等)。该指令会先评估表达式获取字符串结果,随后将该字符串作为代码进行二次评估。这为高度动态的界面逻辑(如由后端下发的动态指令字符串)提供了原生支持。
### 优化
- **指令扫描系统**:
- **严谨性增强**: 在 `_scanTree` 中引入了显式的 `triggerAttrs``eachAttrs` 匹配机制,彻底杜绝了以往基于字符串模糊匹配可能导致的误判风险。
- **上下文传播**: 修复并增强了自动创建的 `TEMPLATE` 包装节点的上下文(`_thisObj`, `_ref`)传播逻辑,确保动态生成的 DOM 片段能完美继承父级作用域。
- **端口修复**: 修复了自动化测试脚本中的端口配置冲突,确保 CI/CD 流程的稳定性。
## v1.0.12 (2026-05-25)
### 修复
- **上下文绑定**: 修复了在对非 `template` 节点使用 `$if``$each` 指令时,框架自动创建 `<template>` 会过早转移未初始化的父级上下文,并在脱离 DOM 树后跳过深度扫描,导致 `this` 指向丢失为自身 DOM 节点的严重 Bug。同时优化了向上寻找上下文的遍历路径避免了双重循环的性能开销。
## v1.0.11 (2026-05-21)
### 核心优化
- **嵌套作用域同步**: 彻底重构了 `$each` 指令在节点复用时的上下文同步机制。现在复用节点会主动感知并合并父级作用域变量(`_ref`)的变更,解决了在虚拟滚动场景下嵌套 `$each` 数据不更新的严重 Bug。
- **按需扫描机制**: 引入了变更感知逻辑,只有当迭代项引用变化或父级上下文变量变化时才触发子树扫描(`_scanTree`),大幅提升了复杂嵌套组件的滚动性能。
- **性能遥测系统**: 在 `dom.js` 中内置了 `__statePerformanceTelemetry` 埋点,支持实时监控 `scanCount`(扫描)、`reuseCount`(复用)和 `moveCount`DOM 移动)等核心指标,为极致性能调优提供数据支撑。
## v1.0.10 (2026-05-18)
### 修复
- **生命周期**: 修复了 `onunload` 监听器因字符串匹配错误导致的失效问题。
- **插槽合并**: 修复了 `_mergeNode` 在处理 `TEMPLATE` 节点时未正确指向 `.content` 的问题。
- **架构对齐**: 恢复了 `_parseNode` 的原始执行顺序,确保组件初始化与属性绑定时序的绝对安全性。
## v1.0.9 (2026-05-18)
### 修复
- **事件监听**: 修复了 `dom.js``onunload` 钩子由于字符串匹配错误导致失效的问题(由 `onunload` 修正为 `unload`)。
- **解耦逻辑**: 移除了 `index.js` 中硬编码的 Bootstrap 主题自动切换逻辑,回归通用的状态管理库定位。
### 优化
- **渲染性能**: 进一步微调了 `$each` 循环更新时的指令扫描路径,避免了在已有绑定节点上不必要的父级作用域向上查找。
- **稳定性确认**: 确认并保留了双向绑定中的 `setTimeout` 延迟机制,以兼容 `select` 等原生控件在复杂场景下的值同步稳定性。
## v1.0.8 (2026-05-18)
### 重大修复与回归
- **架构还原**: 忠实还原了开发者亲自编写的核心逻辑,移除了所有过度设计的复杂处理。
- **时序优化**: 微调了组件属性解析时机,确保 `$.prop` 赋值发生在组件 `setupFunc` 运行前,且正确指向父级作用域。
- **合并修复**: 解决了组件模板内部自带的 `$class``$style` 指令不执行的问题,确保多源属性和谐共存。
- **文档规范**: 在 README 中增加了针对 AI 代理的“核心逻辑修改禁令”,确保未来维护的稳定性。
## v1.0.7 (2026-05-18)
### 修复
- **深度属性合并**: 解决了当组件实例上同时存在静态 `class` 和动态 `$class` 时,动态绑定可能覆盖实例或模板原有静态类的问题。
- **基准属性系统**: 引入 `_baseClass``_baseStyle` 累加机制。所有来源的静态属性(实例处、组件模板根节点)都会被捕获为“基准值”,动态绑定将在基准值之上进行增量更新。
## v1.0.6 (2026-05-18)
### 修复
- **初始化时序**: 修正了组件实例指令在 `setupFunc` 执行前完成初次评估的问题。现在在组件初始化(含 `setupFunc`)完成后会立即触发指令重绘,确保 `$class` 等指令能正确响应在 `setupFunc` 中设置的属性。
- **合并鲁棒性**: 优化了 `class` 的处理流,确保实例静态类、模板静态类以及实例动态类能够按照正确的优先级合并,互不干扰。
## v1.0.5 (2026-05-18)
### 修复
- **属性合并**: 改进 `src/component.js` 中的 `_mergeNode` 逻辑,支持组件模板与实例之间的 `class``style` 属性合并,而非简单覆盖。
- **动态绑定增强**: 优化 `src/dom.js` 中的 `$class``$style` 绑定逻辑。现在动态类支持自动切换切换时移除旧类动态样式支持与静态样式Base Style智能合并。
## v1.0.4 (2026-05-18)
### 修复
- **表达式评估**: 改进 `src/core.js` 中的 `_returnCode` 逻辑,支持多语句表达式(如 `$.target="console.log(1); thisNode.parentNode"`)。现在会自动将最后一条语句作为返回值,避免因 `return` 关键字前置导致多语句执行异常。
## v1.0.3 (2026-05-18)
### 修复
- **组件初始化优先级**: 优化 `src/dom.js` 中的 `_parseNode` 逻辑,确保组件容器上的指令(如 `$.target`)在 `setupFunc` 执行前完成评估与赋值。
- **作用域解析**: 将 `this.``this.parent.` 的自动替换逻辑前移至 `_parseNode`,解决了组件属性绑定在初始化时的作用域歧义问题。
### 测试
- 新增 `test/priority.test.js`,验证组件属性优先级及跨作用域属性解析的正确性。
## v1.0.2 (2026-05-17)
### 优化
- **稳定性**: `src/dom.js` 中的 `bind` 属性逻辑改为使用 `setTimeout` 确保 DOM 更新完成后同步值,提高双向绑定在高频操作下的可靠性。
- **健壮性**: `src/observer.js``NewState` 增加对已观察对象的检查,防止重复包装导致的性能损耗。
- **功能**: `src/dom.js``_translator` 支持 `{key}` 模板替换,增强国际化组件的灵活性。
- **清理**: 全面规范代码缩进Tab移除 `src/core.js` 中的调试注释。
## v1.0.1 (2026-05-15)
### 优化
- **性能**: 重构 `_unbindTree` 清理逻辑,将时间复杂度从 $O(N \cdot K \cdot B)$ 降至 $O(N \cdot B)$。1000 项更新性能提升约 60%。
- **稳定性**: 引入 `MAX_UPDATE_DEPTH` (100) 递归保护机制,防止双向绑定循环导致爆栈。
- **内存**: 优化绑定追踪机制,通过 `binding._sets` 实现更精确的依赖清理。
### 测试
- 引入 Benchmark 自动化校验,确保后续修改不会引入性能回退(>20% 容差)。
- 增加 `$each` 对极端数据null/undefined/非 Iterable的鲁棒性测试。
### 文档
- 完善 `TEST.md` 性能基准数据。
- 校准全案版本号一致性。
## v1.0.0 (2026-05-14)
### 修复
- 修正 `src/dom.js` 中 SVG 加载的 `fetch` 缓存参数名错误 (`cache1` -> `cache`)。
- 优化 `src/index.js` 入口逻辑,支持在 `DOMContentLoaded` 之后加载时自动初始化。
### 优化
- 完善 `playwright.config.js` 自动化测试配置,支持 `webServer`
- `test/index.html` 引入 `importmap` 映射,实现真正的“零构建”开发体验。
### 测试
- 大幅提升 `test/dom.test.js` 测试覆盖率,涵盖 `$if`, `$each`, `$bind` 等核心指令。
- 引入性能基准测试Benchmark监控大规模 DOM 渲染性能。
### 文档
- 新增 `README.md``TEST.md`
- 明确记录架构设计决策:维持“单层响应式”与“基于索引复用”列表机制,以确保极致轻量。