state/CHANGELOG.md

139 lines
8.7 KiB
Markdown
Raw Normal View History

# CHANGELOG
## v1.0.16 (2026-06-05)
### 修复
- **挂载节点绑定失效**: 修复了在离线/内存中提早调用 `_scanTree` 时子节点被错打 `_stScanned` 标记,导致节点被真正挂载(`isConnected`)时因 `_stScanned` 为真而被 MutationObserver 跳过,从而使其上的表达式绑定未被计算的 Bug。现在只有当节点真正 connected 时才记录 `_stScanned = true`,且在模板包装节点时主动删除原有的 `_stScanned` 标记。
2026-06-05 19:17:54 +08:00
## v1.0.15 (2026-06-05)
### 修复
- Bump package version and prep tags.
2026-06-05 19:17:54 +08:00
2026-06-05 19:16:52 +08:00
## 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`,验证组件属性优先级及跨作用域属性解析的正确性。
2026-05-17 16:48:29 +08:00
## 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`
- 明确记录架构设计决策:维持“单层响应式”与“基于索引复用”列表机制,以确保极致轻量。