SuperAPI AI 工具集

reference-core

通用与其它

查看项目

更新于 10-16 01:15

技能介绍

用途:该技能说明 packages/core(Angular 框架核心)的架构与心智模型,供在修改该目录代码前建立整体认识。

主要能力: 一、渲染引擎 Ivy/Render3(src/render3)。采用指令式方式,编译器把模板转换为指令调用序列(如 ɵɵelementStart、ɵɵtext、ɵɵproperty),运行时执行以创建和更新视图。核心数据结构为 LView(逻辑视图,存 DOM 节点、绑定值、指令/组件实例,见 render3/interfaces/view.ts)与 TView(模板视图,存绑定属性名、节点关系、编译后的指令定义,同一模板的所有实例共享),二者为并行数组,LView 中索引 i 对应 TView 中索引 i 的元数据,内部按 HEADER、DECLS、VARS、EXPANDO 分区。渲染分创建模式与更新模式:前者创建 DOM 节点并存入 LView,后者比较当前值与 LView 中旧值并按需更新 DOM。 二、依赖注入(src/di)。分两个互相协作的系统:模块注入器 R3Injector(由 @NgModule.providers 或 providedIn: 'root' 配置,见 di/r3_injector.ts)与节点注入器(由 @Component.providers 或 @Directive.providers 配置,是嵌入 LView Expando 区的数据结构而非类)。节点注入器用 Bloom 过滤器(TView.data)快速判断某节点索引上是否存在某 token,解析从当前节点沿视图树向上,未找到再回退到模块注入器。 三、变更检测(src/change_detection)。基于脏值检查;策略有 Default(全部检查)与 OnPush(仅输入变化、事件触发或信号更新时检查)。Signals 是可通知调度器的响应式原语,可能支持细粒度更新(Zoneless)。

适用场景与用法:在着手修改 packages/core 前阅读,用于定位相关指令、评估对 LView/TView 的影响并遵循既有约定。

限制与注意事项:私有/内部导出通常以 ɵ 前缀命名;Ivy 在执行指令时大量依赖全局状态(如 getLView())以避免到处传递上下文,出于性能与代码体积考虑;代码为性能与内存高度优化,常见用数组代替对象、位掩码与手动内存管理,应尊重这些模式。若修改运行时行为,先找到 src/render3/instructions 中对应指令;若新增状态,先确定它在 LView 数组中的位置;core 有大量测试,使用 Bazel 运行。其余细节(如具体版本中 Signals 所在位置、完整测试命令)暂未提供。