npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@type-dom/signals

v0.9.0

Published

> **@type-dom/signals** - TypeDOM 响应式系统核心库

Downloads

466

Readme

Signals 库文档说明

@type-dom/signals - TypeDOM 响应式系统核心库


📁 目录结构

libs/signals/
├── .ai/
│   └── rules/
│       ├── agent-workflow.md      # AI Agent 工作流程规则 ⭐
│       └── coding-standards.md    # Signals 编码规范 ⭐
├── AI-D2C/                      # 📚 AI 学习文档
│   ├── AI-README.md             # AI-D2C 总索引
│   ├── DOCS-NAVIGATION.md       # 完整文档导航
│   ├── SIGNALS-BASICS-GUIDE.md  # 基础入门指南
│   ├── QUICK-REFERENCE.md       # 快速参考卡片
│   ├── AI-OPTIMIZATION-GUIDE.md # 概念完全指南
│   ├── ADVANCED-PATTERNS.md     # 高级模式指南
│   ├── TRIGGER-COMPLETE-GUIDE.md # Trigger API 指南
│   ├── TROUBLESHOOTING-GUIDE.md # 问题排查指南
│   ├── AI-CODE-CHECKLIST.md     # 代码检查清单
│   ├── ADVANCED/                # 🔬 高级技术文档
│   │   └── SIGNALS_DETAILED_ANALYSIS.md # 深度技术分析
│   └── ARCHIVES/                # 📦 历史归档
│       ├── README.md
│       ├── COMPLETION-REPORT.md
│       ├── TEST-ADDITION-REPORT.md
│       └── DOCUMENT-INTEGRATION-REPORT.md
├── src/                          # 💻 源代码(仅 3 个文件)
│   ├── index.ts                 # 主入口:Signal/Computed 类 + 全部工厂函数 (524 行)
│   ├── system.ts                # 底层系统:ReactiveNode / Link / propagate (282 行)
│   └── batch.ts                 # batch() / batchEffect() 批处理封装 (33 行)
├── tests/                        # 🧪 单元测试与基准(vitest)
│   ├── api-coverage.spec.ts     # API 覆盖测试
│   ├── conformance.spec.ts      # 语义一致性测试
│   ├── bench/                   # 跨框架性能基准(32 场景 × 6 框架)
│   └── ...
├── benchmarks/                   # 📊 生成的 HTML 性能报告
└── README.md                     # 本文件

⚠️ 注意:signal.ts / computed.ts / effect.ts / types.ts / utils.ts 在当前版本中不存在。 Signal 与 Computed 以类形式定义在 src/index.ts 内。测试框架为 vitest(非 bun test)。


🎯 文档分类

Rules (规则) - .ai/rules/

目标: 指导 AI Agent 的工作流程和编码标准

包含内容:

  • ✅ AI Agent 如何阅读和理解代码
  • ✅ 开发流程和最佳实践
  • ✅ Signal/Computed/Effect API 使用规范
  • ✅ 测试编写标准和模板
  • ✅ 性能优化最佳实践
  • ✅ 搜索和调试技巧

当前文件:

  • agent-workflow.md - AI Agent 工作流程规则
  • coding-standards.md - Signals 编码规范

特点:

  • 都有 trigger: always_on 元数据
  • AI Agent 处理 signals 代码时自动加载
  • 包含"怎么做"和"做什么"

Standards (规范) - 已整合到 Rules 中

在 signals 项目中,编码规范已整合到 coding-standards.md 中,与 agent-workflow.md 一起作为 Rules 的一部分。

这与 Claude Code 项目的模式一致:

  • agent-workflow.md - 工作流程规则
  • coding-standards.md - 编码规范规则

两者都有 trigger: always_on,AI Agent 会自动加载。


📖 如何使用

AI Agent 使用 Rules

当 AI Agent 处理 signals 相关代码时:

  1. 自动加载: agent-workflow.md (因为有 trigger: always_on)
  2. 遵循流程: 按照文档中的工作流程执行
  3. 参考源码: 优先阅读 src/ 和 tests/
  4. 查阅文档: 需要详细信息时参考 AI-D2C/

人类开发者使用 Standards

当人类开发者需要:

  1. 学习 API: 阅读 docs/API-SPECIFICATION.md
  2. 编写测试: 参考 docs/TESTING-GUIDE.md
  3. 优化性能: 查看 docs/PERFORMANCE-GUIDE.md
  4. 理解架构: 阅读 docs/ARCHITECTURE.md
  5. 深入原理: 研究 docs/IMPLEMENTATION-DETAILS.md

🔗 快速链接

Rules (AI Agent)

Standards (人类开发者)

已整合到 Rules 中,通过 coding-standards.md 提供:

  • ✅ API 使用规范
  • ✅ 测试编写标准
  • ✅ 性能优化指南
  • ✅ 常见陷阱和反模式

源码(仅 3 个文件)

  • src/index.ts - 主入口:Signal/Computed 类 + 全部工厂函数(524 行)
  • src/system.ts - 底层系统:ReactiveNode / Link / propagate(282 行)
  • src/batch.ts - batch() / batchEffect() 批处理封装(33 行)

测试(vitest,非 bun test)


📊 性能基准报告(跨框架对比)

数据来源:tests/cross-framework.bench.ts + tests/cross-framework.report.ts,由 nx run signals:bench-report 生成的 benchmarks/report-*.html。 下文为 2026-08-28T13-04-17 一次运行的快照,共 32 个场景,对比 6 个响应式框架。 数值单位 hz(每秒操作数,越高越好)。

运行方式

# 生成 HTML 报告(含数据矩阵、内存表、总结评价)
nx run signals:bench-report
# 等同于 vitest run --config vitest.report.mts

总览(综合排名)

| 框架 | 胜场(32 场景) | 平均名次 | 几何均值速度 | |------|:---:|:---:|:---:| | @type-dom/signals | 28 | 1.3 | 0.964 | | @preact/signals-core | 1 | 2.3 | 0.667 | | alien-signals | 3 | 2.7 | 0.611 | | @vue/reactivity | 0 | 4.3 | 0.325 | | solid-js | 0 | 4.9 | 0.172 | | mobx | 0 | 5.7 | 0.099 |

signals 在 32 个场景中拿下 28 项第一(胜率 87.5%),且从不垫底,是测试集里综合最快的框架。

性能数据矩阵(hz,越高越好)

| 场景 | @type-dom/signals | @vue/reactivity | @preact/signals-core | alien-signals | solid-js | mobx | 第一名 | |------|---:|---:|---:|---:|---:|---:|:---:| | createSignals: create 1000 signals | 25,296 | 15,280 | 26,815 | 26,479 | 19,956 | 9,669 | @preact/signals-core | | updateSignals: 10000 writes (no subscribers) | 155,165 | 6,871 | 16,066 | 27,909 | 13,700 | 3,596 | @type-dom/signals | | noOpWrites: 10000 writes of same value (short-circuit) | 193,567 | 6,966 | 26,241 | 12,980 | 14,739 | 4,325 | @type-dom/signals | | readSignals: 10000 reads | 83,799 | 25,732 | 29,084 | 27,371 | 22,965 | 22,968 | @type-dom/signals | | createComputations: build 100-deep computed chain | 170,130 | 107,890 | 159,375 | 154,884 | 69,676 | 23,639 | @type-dom/signals | | computedRecompute: 10000 cold recomputes (cache miss) | 2,069 | 786 | 1,476 | 1,633 | 223 | 174 | @type-dom/signals | | computedCache: 10000 cached reads | 68,005 | 13,358 | 14,845 | 14,259 | 9,005 | 1,608 | @type-dom/signals | | untrackedReads: 10000 untracked reads | 9,226 | 1,261 | 5,849 | 2,007 | 5,892 | 2,164 | @type-dom/signals | | diamond: A → (B, C) → D, 1000 cycles | 12,184 | 6,551 | 11,534 | 7,711 | 1,481 | 1,171 | @type-dom/signals | | triangle: glitch-free redundant edge, 1000 cycles | 16,269 | 9,681 | 14,851 | 9,942 | 2,409 | 1,886 | @type-dom/signals | | broadPropagation: 1 → 100 computeds fan-out | 5,020 | 2,606 | 3,760 | 2,737 | 791 | 1,372 | @type-dom/signals | | deepPropagation: 100-level chain updates | 4,182 | 2,562 | 3,600 | 3,433 | 547 | 303 | @type-dom/signals | | mux: two signals fan-in, 1000 cycles | 7,911 | 3,646 | 6,865 | 5,343 | 942 | 830 | @type-dom/signals | | avoidablePropagation: constant computed cuts propagation | 20,978 | 8,884 | 19,414 | 14,347 | 3,085 | 2,553 | @type-dom/signals | | molBench: ring of 10 atoms, 1000 cycles | 3,156 | 1,261 | 1,647 | 1,873 | 465 | 107 | @type-dom/signals | | cellx1000: 1000-deep computation chain, 100 cycles | 372 | 272 | 349 | 353 | 53 | 30 | @type-dom/signals | | effectFanout: 1 signal → 100 effects, 1000 writes | 456 | 283 | 324 | 300 | 101 | 52 | @type-dom/signals | | dynamicDeps: branch switch, 1000 cycles | 5,207 | 2,394 | 4,873 | 3,844 | 813 | 670 | @type-dom/signals | | randomGraph: 10x10x5, lazy 80%, 200 cycles | 5,004 | 2,644 | 4,313 | 3,973 | 866 | 164 | @type-dom/signals | | randomGraph: 10x10x5, dyn 25%, lazy 80%, 200 cycles | 4,859 | 2,220 | 4,368 | 3,972 | 794 | 674 | @type-dom/signals | | randomGraph: 6x20x5, dyn 50%, lazy 50%, 100 cycles | 3,913 | 1,951 | 3,622 | 3,263 | 598 | 514 | @type-dom/signals | | unstable: 1 source switches routed deps every cycle | 5,900 | 2,579 | 4,782 | 4,126 | 927 | 738 | @type-dom/signals | | batchedWrites: batch of 100 writes → 1 flush | 568,988 | 5,372 | 314,996 | 354,134 | 100,583 | 134,718 | @type-dom/signals | | nestedBatch: 10 inner batches x 5 writes | 850,996 | 20,166 | 543,883 | 585,805 | 187,289 | 201,469 | @type-dom/signals | | repeatedObservers: create + dispose 1000 effects | 13,196 | 6,915 | 14,922 | 18,850 | 2,222 | 1,453 | alien-signals | | effectScope: create 1000 effects in scope, dispose once | 10,373 | 8,739 | 13,408 | 14,839 | 1,971 | 1,541 | alien-signals | | [LARGE] churn: create + dispose 100000 effects (GC pressure) | 129 | 70 | 140 | 194 | 22 | 16 | alien-signals | | [LARGE] deepChain: 1000-level chain, 30 cycles | 1,231 | 791 | 1,124 | 1,043 | 177 | 99 | @type-dom/signals | | [LARGE] wideFanout: 1 → 1000 computeds, 30 cycles | 1,312 | 897 | 1,107 | 888 | 259 | 446 | @type-dom/signals | | [LARGE] bigGraph: 20x100x4, dyn 10%, 30 cycles | 4,251 | 2,333 | 3,059 | 3,634 | 1,010 | 148 | @type-dom/signals | | [LARGE] effectFanout: 1 signal → 1000 effects, 100 writes | 387 | 256 | 311 | 302 | 91 | 50 | @type-dom/signals | | [LARGE] wideGraph: 25x1000x5, dyn 5%, 10 cycles | 486 | 262 | 375 | 407 | 97 | 29 | @type-dom/signals |

内存占用(每对象堆字节 + 规模峰值,越小越好)

| 框架 | 每 Signal | 每 Effect | 10 万 Signal 峰值 | |------|---:|---:|---:| | @type-dom/signals | 371.5 B | 598.5 B | −16.1 MB | | @vue/reactivity | 379.7 B | 786.8 B | −3.9 MB | | @preact/signals-core | 306.1 B | 406.0 B | −210.3 MB | | alien-signals | 345.2 B | 592.8 B | 3.1 MB | | solid-js | 426.4 B | 1270.4 B | 11.4 MB | | mobx | 562.7 B | 764.7 B | 32.5 MB |

⚠️ 「10 万 Signal 峰值」列基于 process.memoryUsage().heapUsed 前后差值,受 V8 GC 时机影响噪声较大(负值即采样期间发生回收),仅作量级参考;「每 Signal / 每 Effect」列取 3 次平均更可靠。signals 每 Signal 371.5 B 与 alien 345.2 B 仅差 ~9%,差距被 Link 连接边开销稀释。

总结与对 @type-dom/signals 的评价

结论:综合最强梯队。 在 32 个场景中拿下 28 项第一(胜率 87.5%),几何均值速度全场最高,平均名次 1.3,从不垫底,是测试集中综合最快的框架。

核心优势(碾压级):

  • 写入 / 批处理:updateSignals 是 Vue 的 21×、MobX 的 43×;batchedWrites 是 Vue 的 125×,nestedBatch 是 Vue 的 47×。Signal.set 的 if (this.pendingValue !== value) 同值短路在 noOpWrites 直接体现(193,567 hz,是 Vue 的 24×、alien 的 15×)。
  • computed 计算:createComputations / computedRecompute / computedCache 全部第一;缓存命中是 MobX 的 35×、Vue 的 5.6×。
  • 图传播 / 大规模:diamond / triangle / mux / molBench / 随机动态图 / deepChain / wideFanout / bigGraph / wideGraph 全胜;[LARGE] bigGraph 是 MobX 的 28×,规模越大优势越明显。
  • 动态依赖:dynamicDeps 及全部随机图场景第一,相对第二名约 1.2× 稳定优势;unstable(依赖图重建)也第一。

真实短板(仅相对理论最优,非工程缺陷):

  • GC 压力:Lifecycle 三场景系统性落后 alien-signals——repeatedObservers 1.34×、effectScope 1.52×、[LARGE] churn(10 万次创建+销毁)1.65×。根因是类实例模型(Signal/Computed/EffectNode 必进堆)vs alien 的字面量(可被逃逸分析栈分配)。但相对 Vue/Preact/MobX 仍占优(churn 是 Preact 的 1.2×、Vue 的 1.6×)。
  • 超深链:cellx1000(1000 层)以 372 hz 小幅落后 Preact 的 349(约 1.06×)——唯一被非 alien 框架反超的场景,极深链逐层传播有微小优化空间。
  • 内存自动化:内存已纳入自动化(每 Signal 371.5 B,alien 345.2 B,差 ~9%;10 万 Signal 峰值见上表),但 GC 次数 / 对象存活时长等长周期指标仍依赖手动采样,未做分代统计。

结论:@type-dom/signals 是一套生产级、综合最强的响应式库:写入、批处理、计算缓存、图传播与大规模场景全面碾压 Vue / Preact / MobX / Solid,且从不垫底。其唯一相对弱点是高频创建+销毁的 GC 压力(类实例 vs 字面量),以及极深链传播的微小落后——这两点相对主流框架依然占优,属于「与理论最优实现的差距」而非工程缺陷。后续优化应优先聚焦 Lifecycle / churn 场景的对象分配与回收(约 1.65× 差距)。

⚠️ 注:alien-signals 用纯字面量节点(可被 V8 逃逸分析栈分配),在高频创建+销毁场景 GC 压力更小;signals 用 Signal/Computed 类实例换取类型安全与生产可维护性,代价是单次创建/销毁成本略高。两者定位不同:alien = 算法参考实现,signals = 带生产级优化的完整库。


💡 核心原则

Rules vs Standards 的关系

在 signals 项目中,Rules 包含 Standards:

| 文件 | 内容类型 | trigger | |------|---------|--------| | agent-workflow.md | 工作流程规则 | ✅ always_on | | coding-standards.md | 编码规范规则 | ✅ always_on |

两者都是 Rules,都有 trigger,AI Agent 都会自动加载。

这与 Claude Code 项目的模式一致。


📝 维护指南

添加新的 Rule 文件

  1. 在 .ai/rules/ 创建 .md 文件
  2. 必须添加 trigger: always_on 元数据
  3. 聚焦特定主题 (如: testing-guide.md, performance-tips.md)
  4. 保持与现有文件职责不重叠

更新现有 Rules

  • agent-workflow.md: 更新工作流程、策略、技巧
  • coding-standards.md: 更新 API 规范、测试标准、最佳实践
  • 保持两者职责清晰,不重叠

文档组织原则

  • 小而专注: 每个文件聚焦一个主题
  • 交叉引用: 相关文档互相链接
  • 易于查找: 清晰的命名和结构

🚀 下一步计划

短期 (1-2 周)

  • [ ] 创建 docs/API-SPECIFICATION.md
  • [ ] 创建 docs/TESTING-GUIDE.md
  • [ ] 验证 AI Agent 正确加载 rules

中期 (1-2 月)

  • [ ] 创建 docs/PERFORMANCE-GUIDE.md
  • [ ] 创建 docs/ARCHITECTURE.md
  • [ ] 创建 docs/IMPLEMENTATION-DETAILS.md

长期 (持续)

  • [ ] 根据反馈优化 rules
  • [ ] 完善 standards 文档
  • [ ] 保持文档与代码同步

最后更新: 2026-04-07
维护者: TypeDOM Core Team