- Published on
2026-第三十九周
- Authors

- Name
- AgedCoffee
- @__middle__child
该周报主要为各个地方内容的汇总整理
- 技术
- 使用异步生成器和 Promise.race() 实现更快的 SSE 响应 | www.thecodebarbarian.com
- 取代 npm 包的 Node.js 内置模块
- 响应式 iframe 在 Chrome 154 中的支持
- 12 个无需构建步骤即可立即使用的 CSS 特性
- 我们现在都是产品工程师
- AI 编程让 CI 成了瓶颈
- 使用 DuckDB-Wasm 和 OPFS 在浏览器中实现持久化数据库
- 工具
- GitHub - Human-Agent-Society/reef:面向自我改进智能体的持续学习基础设施 · GitHub
- NeonBlade UI
- Perry
- Electrobun 2.0
- vercel-labs/vgpu
- 更新
- Node.js 26.10.0
- Deno 2.9 | Deno
- 设计
- Hallmark——一种拒绝看起来像 AI 生成的设计技能
- Svelte Bits - 适用于 Svelte 的动画 UI 组件
- 原子设计方法论
- 其他
- 高级工程师死亡螺旋
- 我该如何向不是我下属的人提供反馈?
技术
使用异步生成器和 Promise.race() 实现更快的 SSE 响应 | www.thecodebarbarian.com
SSE 允许 HTTP 服务器以事件流方式逐步向客户端发送数据,把传统一次性响应变成类似异步生成器的多次 yield;文章用 Express、MongoDB 和 Node.js 展示如何按查询完成顺序推送结果,并用 yield* 与 asCompleted() 解决异步生成器中无法从回调里 yield 的问题,从而提升首屏与感知加载速度。
- 🌊 SSE 是 HTTP 服务器向客户端流式发送数据的方式,传统请求只有一个响应,而 SSE 可以逐个发送中间响应。
- ⚡ 传统 HTTP 处理器类似普通
async函数,SSE 则类似异步生成器函数,每次yield都会向客户端发送数据。 - 🗄️ 示例中 Express 路由先并行执行用户和消息两个 MongoDB 查询,传统做法要等全部完成后再返回。
- 🚀 使用 SSE 后,可以在每个查询完成时用
res.write()立即推送,客户端不必等待最慢的查询才能开始渲染有用内容。 - 🧩 作者偏好“无框架 JavaScript”,用异步生成器编写业务逻辑,并通过
toRoute()把每次yield转成 SSE。 - 🚧 异步生成器不能在
then()回调里直接yield,因此需要yield*和辅助函数asCompleted()。 - 🔁
asCompleted()循环使用Promise.race(),按 Promise 完成顺序逐个yield结果,而不是保持原始顺序。 - ⚖️
Promise.all()适合必须等全部数据完成后才能处理的场景;asCompleted()适合只关心完成顺序的异步任务。 - 📦 最终可以并行启动多个操作,谁先完成谁先
yield,让 SSE 在数据可用时立即发送。
取代 npm 包的 Node.js 内置模块
Node.js 现在内置了十二个功能,可以直接替代过去几乎每个项目都会安装的 npm 包,涵盖数据库、测试、HTTP 请求、热重载、环境变量、命令行解析、终端着色、文件匹配、WebSocket、UUID 生成、文件系统操作和 TypeScript 运行等场景。文章逐一给出最短示例、在 Node 24(LTS)中的稳定程度以及每个内置方案相比原包缺失的能力,并说明 Node 22 与 24 之间的差异,最后建议在删除依赖前先确认部署环境版本并把版本固定到 engines 字段。
- 🗄️
node:sqlite替代better-sqlite3:同步 API、用法相似,Node 24 中为 1.2 发布候选(24.15.0 起),Node 22 仍为 1.1;缺点是没有db.transaction()自动事务封装,需自己写 BEGIN/COMMIT/ROLLBACK。 - 🧪
node:test与node:assert替代 Jest 和 Mocha:零配置,node --test自动发现测试文件,Node 20 起稳定;但代码覆盖率、模块级 mock 和 watch 模式仍是实验性,重度依赖模块 mock 的项目暂时保留 Jest。 - 🌐 全局
fetch()替代axios和node-fetch:基于 undici,自带 Request/Response/Headers/FormData,Node 21 起稳定;但 404/500 不会抛错(需自行检查res.ok),没有拦截器和自动重试,代理需--use-env-proxy。 - 🔄
node --watch替代nodemon:一条命令即可在文件变更时重启进程,Node 22 起稳定;默认只监听入口文件和被导入模块,--watch-path仅支持 macOS 和 Windows,且不能与--run组合。 - 🔐
--env-file和process.loadEnvFile()替代dotenv:支持引号、多行值和#注释,命令行标志还能解析NODE_OPTIONS;但无变量展开(需 dotenv-expand),文件缺失会报错(可用--env-file-if-exists),且 shell 中已设的变量优先。 - ⌨️
util.parseArgs()替代yargs、commander和minimist:Node 20 起稳定,支持短选项和默认值;但类型仅支持 string/boolean,无--help生成、无子命令,未声明的选项默认抛错,正式对外 CLI 仍建议用 commander。 - 🎨
util.styleText()替代chalk:Node 22.13 起稳定,支持样式数组组合、遵循 NO_COLOR/FORCE_COLOR;但输出非终端时自动去掉颜色码(测试时需validateStream: false),且没有链式调用 API。 - 📂
fs.glob()替代glob:Node 24 稳定(Node 22 为实验性),支持花括号扩展和 exclude;但 Promise 版返回异步迭代器而非数组,选项也远少于 glob 包。 - 🔌 全局
WebSocket替代ws的客户端部分:Node 22.4 起稳定,浏览器同款 API;但仅限客户端,服务端仍需安装ws,核心中没有 WebSocketServer。 - 🆔
crypto.randomUUID()替代uuid:全局可用,稳定;但只能生成 v4 随机 UUID,没有 v7(时间有序、适合做数据库主键)、validate、parse 和 v5 等能力。 - 🧹
fs.rm()与带recursive的fs.mkdir()替代rimraf和mkdirp:均有同步版本,可用于 clean 脚本;但rm()只接受单个路径不支持模式匹配,且不加recursive: true删目录会报 ERR_FS_EISDIR。 - 📘 TypeScript 类型擦除替代
ts-node和tsx:Node 24.12 起稳定,无需安装配置,不做类型检查也没有 source map;但仅支持可擦除语法,enum、namespace、构造函数参数属性等会抛错,Node 26 移除了--experimental-transform-types,且 tsconfig paths 被忽略、不支持 .tsx。 - ⚖️ 总体建议:内置方案只覆盖常见场景,旧包在缺失的功能上仍有价值,例如需要拦截器就用 axios、服务端用 ws、模块 mock 用 Jest;移除依赖前先阅读对应“短板”,并确认部署目标的 Node 版本(Node 22 上 sqlite、glob、env-file 等仍为实验性),在 engines 中固定版本。
响应式 iframe 在 Chrome 154 中的支持
Chrome 154 为 <iframe> 引入了“响应式尺寸”支持,允许 iframe 根据嵌入文档的固有尺寸自动调整自身大小。这一特性替代了过去需要手动测量内容、通过 postMessage() 传递尺寸并更新 iframe 大小的繁琐模式,非常适合嵌入第三方评论组件、高度多变社交媒体内容等场景。嵌入文档需通过 meta 标签显式选择启用,同时支持跨源限制和渐进增强,帮助开发者更无缝地嵌入外部内容。
- 📐 核心新特性:Chrome 154 支持响应式尺寸 iframe,iframe 可根据嵌入文档的内在尺寸自动调整大小,取代以往手动测量与
postMessage()通信的方式。 - 🛠️ 使用方式:宿主端设置
frame-sizing: content-height,嵌入文档需在加载前声明<meta name="responsive-embedded-sizing" content="allow-origins=*">,该 meta 标签不能动态添加。 - 🎛️ frame-sizing 属性值:支持
auto、content-width、content-height、content-inline-size、content-block-size;水平书写模式下content-height与content-block-size最适合垂直扩展嵌入。 - 📏 结合 CSS 约束:可与
max-height、width: 100%等属性搭配使用,实现灵活布局控制。 - 🔄 动态内容调整:浏览器不会持续监听内嵌文档布局变化,内容更新后需调用
window.requestResize()请求重新计算尺寸,且建议在布局前调用以避免尺寸循环。 - 🔐 跨源支持与安全:可通过
allow-origins=https://publisher.example限制允许的嵌入源,多个源以空格分隔,与 CSP 的frame-ancestors形成互补。 - 🧩 渐进增强:利用
@supports (frame-sizing: content-height)和"requestResize" in window特性检测,为不支持新特性的浏览器保留旧有回退方案。 - ⚠️ 注意事项:响应式 iframe 可能因嵌入文档后加载而导致内容偏移,可能影响 Core Web Vitals,尤其在首屏展示时需谨慎。
- 🧪 试用渠道:官方提供了 CodePen 演示,可立即体验响应式 iframe 的实际效果。
12 个无需构建步骤即可立即使用的 CSS 特性
这篇博客文章介绍了 12 个如今可直接在浏览器中使用、无需构建步骤的现代 CSS 特性,它们取代了过去依赖 Sass、PostCSS 插件和各种 JavaScript 变通方案的功能。文章逐一给出了每个特性的代码片段、所替代的旧方案以及截至 2026 年 9 月的浏览器支持情况(依据 MDN 与 web-features),并说明了使用时的注意事项与陷阱。
- 🧩 原生嵌套:浏览器直接展开嵌套规则,
&表示父选择器,媒体和容器查询也可嵌套,无需 Sass 与监听进程;但&__title不会拼接类名 - 🎯 :has():终于能向上查找 DOM 树,可按子元素状态为父级或兄弟元素设置样式,取代大量 JavaScript 类名切换;注意其特异性取决于最强参数
- 📐 容器查询与 cqi 单位:按组件容器宽度而非视口响应,1cqi 等于容器行内尺寸的 1%,可结合
clamp()缩放字号;尺寸容器不能由内容决定自身尺寸 - 🔲 Subgrid:卡片保留自身标记即可借用父网格的行,让标题、段落、按钮跨卡片对齐,无需压平 DOM 或 JS 测量高度;
grid-row: span 3不可省略 - 🎨 oklch() 与 color-mix():用感知均匀的色彩空间做变亮变暗与运行时混色,可配合自定义属性,取代 Sass 的颜色函数;注意超出色域的显示效果
- 📺 aspect-ratio:一行代码取代
padding-top百分比黑科技,宽高自动推算;它是偏好而非强制,内容过高时盒子仍会撑大 - 🗂️ 级联层 @layer:把样式优先级顺序写进 CSS 本身,后层规则无视特异性覆盖前层,文件顺序不再重要;未分层的样式会胜过所有层
- 🪄 :is() 与 :where():在浏览器内展开选择器列表,
:where()零特异性,适合可被轻易覆盖的基础样式 - 🎬 滚动驱动动画:用
animation-timeline: scroll()或view()让动画由滚动位置驱动,取代 GSAP、AOS 或手写 IntersectionObserver;唯一非基线特性,Firefox 仍仅在 Nightly 中实验支持,需用@supports兜底并尊重减弱动效设置 - 📱 dvh、svh、lvh:解决移动端
100vh被工具栏裁切的经典 bug,无需 JS 写入--vh;dvh会随滚动变化,布局推荐默认用svh - 🌍 逻辑属性:用
inline-start等描述书写方向,一套规则自动适配 RTL 语言,取代 PostCSS 生成的双份样式表;切勿与物理属性混用 - ✨ @starting-style:为从
display: none出现的元素提供“初始”状态,实现淡入淡出,取代requestAnimationFrame技巧;只在首次渲染生效,Firefox 的淡出仍会跳变 - 🧪 支持情况自查法:打开 MDN 页面看顶部 Baseline 徽章,并用
@supports包裹有风险的部分,让降级版本依然可用 - 📋 值得一提但未列入正文:
text-wrap: balance、@scope、field-sizing、@property、light-dark()、linear()缓动等,而 CSS 锚点定位仍属 Limited
我们现在都是产品工程师
AI 正在把写代码的边际成本推向零,软件开发生命周期中的编码、审查、维护、部署和运维将依次被代理接管;需求没有上限,因此行业不会萎缩,但“程序员”工作会转向产品工程:理解客户、定义“好”、做出令人愉悦的产品。未来十年动荡,更多人做软件,但几乎没人只是打字。
- 💸 写代码成本已崩塌:LLM 让最昂贵的编码环节趋近免费,整个行业围绕昂贵程序员的旧结构正在改变。
- 🤖 两大假设:代理将吃掉整个软件开发生命周期;软件需求实际上无限,当前初级岗位过剩只是过渡状态。
- 🧩 成本拆解:编码已崩塌;代码审查和维护即将自动化;部署与扩展是下一步;决定做什么、定义“好”、令人愉悦可能最安全。
- 📉 初级开发者受重创:AI 暴露职业中 22-25 岁就业比同龄低 19%,大厂入门招聘自 2019 年降 65%,但工程师占招聘比例反升。
- 🐞 代理进步快:修真实 bug 基准从约 50% 到约 95%,Claude Code 的 PR 84% 被合并,Big Sleep 发现 SQLite 漏洞。
- ⚠️ 审查危机:GitHub 提交和 PR 暴增,多数 PR 无审查,代理 PR 常由另一个代理审查;AI 垃圾提交导致 curl 关闭漏洞赏金。
- 🚀 运维与扩展:数据少但逻辑上将是下一波自动化,代理在更像操作系统的基准上仍低于 65%。
- 🍞 产品发现不可自动化:每个软件都是人的欲望的形式化,需求因客户而异,必须从客户脑中挖掘,无法机械训练。
- 🎨 设计/品味仍关键:当大家都能构建正确功能时,令人愉悦的设计成为竞争点;它按产品计价、不可转移。
- 🧑💼 新工作是产品工程师:历史上有系统分析师/产品经理;现在以 forward deployed engineer、解决方案工程师等名义招聘,平均总包约 24 万美元,高级超 60 万。
- 🏭 这不再是传统编程:代码写作只是最小部分,公司付钱买能深入客户业务、定义“好”并交付的人。
- 🎓 人才管道缺失:APM 等项目每年仅培训几十到几百人,大学/训练营不教需求分析与品味;市场会解决但太慢,会伤害一批人。
- 🪵 手艺损失真实:许多热爱编码的人将被迫转向产品工作;手艺像木工一样成为爱好,但不再是主要职业。
- 🔮 十年展望:动荡先来,之后行业更大、薪酬相当、形态接近产品工程;更多软件、更多制作者、几乎无人只是打字。
AI 编程让 CI 成了瓶颈
Linear 因 AI 编码代理大幅加速交付,CI 成为新瓶颈,于是围绕“缩短 PR 等待时间”和“降低 runner 时间消耗”系统性优化 CI;虽然测试套件较年初接近四倍,PR 等待从 6 分钟以上降至 5 分钟出头,单个测试的 runner 时间约减半。
- 🤖 AI 代理让写代码和发 PR 更快,但验证速度没同步跟上,CI 因此成为瓶颈,推高基础设施成本并拖慢反馈。
- 🎯 Linear 优化目标:缩短 PR 在 CI 中的等待时间,并降低 runner 时间消耗;测试套件几乎四倍增长后仍实现整体提速。
- 🏗️ 改进分为四类:升级基础设施和工具、优化门控作业、减少重复设置、提升测试执行效率。
- ⚡ 基础设施升级:从 GitHub Actions 迁到第三方 runner,同类任务平均快 34%,
tsc快 52%;采用tsgo后每周tsc检查中位数降 73%。 - 🧹 移除 lint 对 TypeScript 类型信息的依赖,ESLint 不再需要完整类型图,API lint 时间降 68%,全仓 lint 降 55%,内存占用也大幅下降。
- 🔄 后续迁移到 Oxlint 更容易,因为纯语法规则更易移植,并进一步减少 lint 消耗的 runner 分钟。
- 🚦 优化门控作业:change-detection 限制 fetch depth、采用稀疏/blobless checkout;中位时长从 26 秒降至 8 秒,p90 从 31 秒降至 12 秒,最慢从 138 秒降至 37 秒。
- 🛡️ 替换
actions/checkout为自定义 composite action,加入重试退避、低速超时和持久 git mirror,减少网络不稳定导致的 checkout 挂起。 - ✂️ 将 cache marker 写入移出关键路径,改为测试分片完成后运行但不阻塞合并,为每个 API PR 和 merge-queue 条目节省 42 秒。
- 📦 减少重复 setup:在 CI 基础镜像中预装 Postgres client 等共享依赖,避免每个测试分片重复安装。
- 📥 按需安装依赖:在 pnpm monorepo 中只安装 API 包及其依赖,
pnpm install从 44-73 秒降至 16-18 秒。 - 🗑️ 发现重建比缓存更快:
node_modules缓存命中约需 28 秒恢复,而过滤安装约 7.5 秒,因此放弃缓存;每分片 setup 从 110-140 秒降至 67-73 秒。 - 🧩 避免重放未变更设置:数据库改用 schema 快照和 bootstrap,容器数据库设置从约 12 秒降至 1-2 秒。
- 🧱 将 7 个短检查合并为 2 个作业并并发执行,基于 6 月用量每月节省约 87,000 runner 分钟,占 CI 总量 11.8%。
- 🧪 测试执行优化:Vitest 按文件分片,拆分大测试文件;增至 8 分片后关键作业初测快约 19%、便宜约 19%,最慢分片从 5.25 分钟降至 4.33 分钟。
- 🔗 最大单项提升:启用
isolate: false的 opt-in Vitest 项目,让安全文件共享模块注册表;月省约 17%,最慢分片从约 300-379 秒降至 195 秒,总 API 分片 runner 时间从 32.8 分钟降至 22 分钟。 - ⚠️ 共享模块状态也是正确性风险最高的优化,需要每个文件显式 opt-in、补充 teardown,并把不安全文件留在隔离项目中。
- 📈 分片受 setup 固定成本限制;setup 优化后 8 分片才可行,之后 8 分片总 setup 约 7.5 分钟,低于原先 4 分片的 8.3 分钟。
- 🔮 若未进行这些优化,今天测试套件大约需要 11 分钟,接近当前等待时间的两倍;每周新增约 2,000 个测试,CI 提速仍需持续进行。
使用 DuckDB-Wasm 和 OPFS 在浏览器中实现持久化数据库
DuckDB-Wasm 现在可以借助浏览器 OPFS 创建持久化数据库,使 .duckdb 文件在页面刷新和浏览器重启后仍可打开;文章介绍了打开数据库、使用数据文件、文件处理模式、持久性保证、导出方法及注意事项。
- 🗂️ 背景:早期 DuckDB-Wasm 数据只存在 Wasm 内存中,持久化需手动序列化到 Parquet 并存入 IndexedDB;现代浏览器 OPFS 提供按源隔离、支持随机读写的文件系统。
- 🚀 用法:通过
opfs://analytics.duckdb和READ_WRITE调用db.open(),之后可正常建表、插入和查询,数据会写入带 WAL 和检查点的普通 DuckDB 文件。 - ⚠️ 版本坑:npm
latest的 1.33.1-dev57.0 会创建 OPFS 文件但不写入,导致无法持久化;应固定 1.32.0 或使用next标签的 1.33.1-dev64.0 及更高版本。 - 📦 数据文件:远程 Parquet 可在首次加载时通过 HTTP range 请求读入 OPFS,之后从本地读取;也可用
COPY将聚合结果写入opfs://cache/...parquet。 - 🗃️ 文件处理:
opfs: { fileHandling: 'auto' }会自动注册 SQL 中的'opfs://...'字面量;手动模式则用registerOPFSFileName()和dropFile(),避免每条语句重复获取 OPFS 句柄。 - 💾 持久性:写入先进入 WAL,默认在超过 16MB 阈值、手动执行
CHECKPOINT或干净关闭时写入主文件;浏览器标签可能被强制终止,建议每批写入后执行CHECKPOINT,或设置checkpoint_threshold = '0KB'。 - 🔒 存储限制:OPFS 仍可能被浏览器在磁盘紧张或长期未访问时清除;它应被视为快速本地缓存和工作状态,真实数据应保存在 DuckLake、S3 等稳定位置。
- 📤 导出:DuckDB-Wasm 尚不能直接移动 OPFS 文件,但可用 OPFS API 读取
.duckdb文件用于下载,或用 SQLCOPY ... TO 'opfs://export/...parquet'导出 Parquet。 - ✅ 结论:建议批量写入后检查点、提供数据库下载能力,并阅读单文件单句柄、SQL 重命名限制等文档说明;这让本地优先分析应用无需服务器、IndexedDB 封装或自定义序列化。
工具
GitHub - Human-Agent-Society/reef:面向自我改进智能体的持续学习基础设施 · GitHub
Reef 是首个面向自我改进智能体的持续学习开源基础设施,连接智能体推理、反馈、学习与版本化交付,支持训练模型权重(结合 Slime 和 SGLang)或优化智能体框架(提示词、规则、技能)。
- 🎯 核心定位:让智能体通过与你交互的过程持续学习、不断变强,支持模型权重训练、框架优化和测试时训练三种路径
- 🧩 技术栈差异:与推理引擎(vLLM、SGLang)和强化学习训练框架(Slime、veRL、AReaL)互补,独家提供版本管理、更新期间保持在线、以及权重之外(技能、框架)的演化能力
- 🔄 四步学习循环:服务(处理请求并记录交互)→ 观察(将反馈匹配到记录)→ 成长(从合格记录生成更新)→ 提交(评估候选并按策略发布版本)
- 📦 安装方式:支持通过 PyPI 安装(
uv pip install reef-infra)或从源码安装,使用 LFS 管理产物和检查点 - 🚀 最小示例:可作为纯推理服务器启动,兼容 OpenAI 和 Anthropic 接口,通过
x-reef-scenario头创建场景,用x-reef-agent-record-id回执上报评分与反馈 - 🛠️ 框架演化:内置 Reefine 配方,仅需模型 API 端点即可用自然语言改进编码框架,支持
/reefine、/versions等交互命令 - 📚 配方生态:按任务类型选择配方,覆盖科学发现(TTT-Discover)、任务流持续学习(SAO、GEPA)、真实使用学习(OpenClaw-RL、SkillClaw);Reefine 随包发布,其余位于 recipes/ 目录
- 🏗️ 文档结构:包含快速开始、HTTP API、编写配方、框架演化、模型演化、配方目录、核心循环和术语表
- 🤝 社区参与:可通过 Discord、微信群、GitHub Discussions 交流,欢迎贡献配方与 RFC 设计,项目已获 4.7k Stars、402 Forks
- 🙏 关键依赖:由 SGLang(高性能推理)、slime(模型权重训练)、cordis(框架演化)等项目提供核心支撑
NeonBlade UI
NeonBlade UI 是一个免费开源的未来主义 React 组件库,提供霓虹美学、锐利边缘和完全的设计控制,帮助开发者快速构建未来感界面。
- 🚀 包含 39+ 组件、2 个模板,npm 下载量超过 2.1k,完全免费且开源。
- 🎨 未来主义美学:采用 clip-path、霓虹光晕和微动画,呈现高端动态视觉效果。
- 📦 CLI 安装:可直接将组件安装到项目中,避免冗余依赖。
- ⚡ 高度可定制:基于 Tailwind CSS,可完全控制样式、变体和颜色,无隐藏逻辑。
- 💬 社区好评:Reddit 上 React 开发者称赞其“绝对棒”、“赛博朋克氛围”、“酷毙了”等。
- 🧑💻 由 Vinay Kalwale 开发,属于 NeuronRush 项目,©2026。
Perry
Perry 是一个将 TypeScript 直接编译为原生可执行文件的工具链,通过 SWC 解析、LLVM 生成机器码,静态链接自研运行时与 GC,无需 Node.js 或外部 JavaScript 引擎即可运行于桌面、移动、可穿戴、电视及 Web/WASM 等平台。
- 🚀 核心定位:Perry 把 TypeScript 编译成原生 GUI 与 CLI 应用,覆盖 macOS、iOS、iPadOS、visionOS、tvOS、watchOS、Android、Wear OS、Windows、Linux 与 Web/WASM,共 11 个正式目标,HarmonyOS 为独立预览。
- ⚙️ 编译流程:TypeScript → SWC 解析 → Perry HIR(单态化)→ LLVM 代码生成 → 原生二进制,全程无中间 JavaScript。
- 📦 无外部引擎:Perry 运行时与垃圾回收器静态链接进各平台二进制,默认不依赖 Node.js、Bun、Deno 或 V8;可选
--enable-js-runtime启用 V8 回退以兼容部分 npm 包。 - 💾 体积与启动:Hello World 约 330 KB,Mango 应用约 7 MB;macOS 运行时基准约 3.2 ms(Apple M 系列)。
- 🧵 真多线程:提供
parallelMap、parallelFilter、spawn等真实 OS 线程,默认拒绝可变捕获,配合 SharedArrayBuffer 与 Atomics 做共享内存协调。 - 🎨 原生 UI 组件:35+ 原生控件映射到 AppKit、UIKit、GTK4、Win32、Android SDK、SwiftUI(手表)及 Web 的 DOM/CSS 桥。
- 🌍 编译期 i18n:自动提取字符串、支持 30+ 区域 CLDR 复数规则,翻译在编译期校验并烘焙进二进制。
- 🧩 插件与包生态:模块可在构建期组合、静态依赖可变为直接原生调用;约 50 个原生包与 Node API 实现(mysql2、pg、bcrypt、axios、sharp、lodash 等),53 个模块被跟踪,覆盖约 97% Node 测试套件。
- ✅ 语言支持:完整支持数字、字符串、布尔、数组、对象、类、泛型、接口、联合类型、async/await、闭包等;Proxy、eval、动态 import、装饰器、弱引用等为部分或暂不支持。
- 📊 基准测试:在阶乘、闭包、二叉树、JSON 往返等项目上优于 Node.js 与 Bun;在素数筛、矩阵乘法上落后;结果因工作负载而异,非通用速度承诺。
- 🚢 发布流程:
perry publish支持构建、签名、打包、验证与提交,可发布到 App Store、Play Store 或直接分发;本地编译免费且为 MIT 许可。 - 🛠️ 上手方式:支持 npm/npx、Homebrew、APT、winget 或源码安装,安装后用
perry doctor、perry compile main.ts、perry check ./src验证工具链与兼容性。 - 🔗 周边项目:Coop 将 Perry 兼容的 TypeScript 目录转为原生应用库并通过 HTTP 服务,每台机器共享运行时与标准库,支持部署、检查与回滚。
Electrobun 2.0
Electrobun 2.0 已发布,主打超快、极小、跨平台桌面应用;它统一支持多语言与多种渲染后端,并带来 Hutch CLI、Cottontail 运行时、Warren 响应式框架、30 个模板,以及差分更新、签名、双发布通道等内置能力。
- 🚀 Electrobun 2.0 发布,用于构建超快、小巧、跨平台桌面应用,Hello World 压缩下载约 1 MB。
- 🧩 同一框架支持 TypeScript、Zig、Rust、Go、Odin,渲染可选系统 WebView、Chromium 或 WGPU。
- 📦 体积对比:Electrobun 原生主进程 1.28 MiB,Cottontail 约 15 MiB,典型 Electron 约 85 MiB(macOS ARM64、系统 WebView 渲染器)。
- 🛠️ 新 CLI Hutch:统一管理包、脚本、打包、固定工具链与发布,替代 npm、Bun 和旧 Electrobun CLI。
- ⚡ 新运行时 Cottontail:基于 Zig 与 JavaScriptCore 的 TypeScript 运行时,关键处兼容 Node.js/Bun 且更小。
- 🎛️ 新 Warren:受 SolidJS 启发的细粒度响应式框架,可写入原生 GPU 表面,或驱动 WebView 内的 UI。
- 🧬 六种主进程/语言:默认 TypeScript,可选 Zig、Rust、Go、Odin,共享核心、构建工具与打包流程。
- 🗂️
hutch electrobun init提供键盘导航模板选择器,内置 30 个起始模板。 - 🔄 差分更新:zig-bsdiff 支持小至 4 KB 更新,可对接 S3、R2 或静态文件托管,无需更新服务器,并支持全量下载回退。
- 🗜️ 发布包为 Zstd 自解压包,首次运行会验证、解压并启动。
- 🔐 内建代码签名与公证:macOS 生成 DMG,Windows 生成 setup 可执行文件,Linux 提供自解压安装器。
- 🎮 three.js 与 Babylon 适配器:可从 Cottontail/Bun 控制原生 GPU 窗口,以及合成到 WebView 上的表面。
- 🌐 默认系统 WebView 保持体积小;可选打包固定 Chromium/CEF,以统一各平台渲染引擎。
- 🧪 内置 Canary 与生产两个独立发布通道。
- 🧰 30 个模板覆盖 Web 框架、应用骨架、GPU/原生、Warren UI 实验性界面等场景。
- 🏢 Dash 桌面产品端到端基于 Electrobun 2.0:Hutch 构建、Cottontail 运行、Warren 渲染部分界面、二进制差分更新。
- 📥 安装:macOS/Linux 使用 curl 脚本,Windows 使用 PowerShell;随后运行
hutch electrobun init创建应用。
vercel-labs/vgpu
vgpu 是 Vercel Labs 开源的跨运行时 WebGPU TypeScript 库,面向着色器、3D 场景、GPU 张量、神经网络和数学可视化,主打类型化 WGSL 导入、极简 GPU-first API,并让同一套代码运行在浏览器、无头 Node 和测试环境。
- 🧩 类型化 WGSL:
.wgsl文件可像 TypeScript 模块一样导入导出,反射机制自动保持绑定名、类型和布局正确,无需手写声明。 - ⚙️ 单一
Gpu上下文:init()返回一个句柄,draw、effect、frame、surface、target等入口都以其为首参,避免隐藏全局状态。 - 📦 体积小:未使用声明在压缩前被裁剪,完整全屏特效约 25 KB gzip,且该预算由 CI 强制执行。
- 🌐 多运行时:同一公共 API 覆盖浏览器、Dawn 支持的无头 Node(
vgpu/node)和用于测试/CI 的确定性 mock(vgpu/mock)。 - 🎞️ 显式帧控制:如
frame(gpu, f => f.pass(target, effect)),pass、clear、draw 都需显式调用,不依赖隐式场景图状态。 - 🤖 面向 Agent:文档、示例画廊和着色器校验可通过 CLI 运行,如
npx vgpu docs、npx vgpu examples、npx vgpu check。 - 🚀 快速开始:使用
pnpm add vgpu和@webgpu/types,通过init/surface/effect/clock/frameLoop即可在 canvas 上运行全屏特效。 - 🖥️ Node 快速开始:
vgpu/node支持target、draw、frame,可读取像素并dispose();vgpu/mock让测试无需真实 GPU。 - 📚 WGSL 标准库:
@vgpu/wgsl-std提供 hash、noise、color、sampling 等可复用声明,着色器也可导出自己的fn、struct或const。 - 📖 文档与示例:完整文档位于
vgpu.sh,包含入门指南、性能手册和交互式示例,也可通过 CLI 离线访问。 - 🧰 Agent 资源:支持示例搜索/拉取、
npx skills add vercel-labs/vgpu、llms.txt、OpenAPI 发现 API,以及 MCP 端点与本地npx vgpu mcp。 - 🗂️ Monorepo 包:公开入口为
vgpu,其他包包括@vgpu/cli、@vgpu/core、@vgpu/wgsl、@vgpu/wgsl-std、@vgpu/adapter-node、@vgpu/adapter-mock、@vgpu/render。 - 📈 仓库数据:约 2.2k Stars、113 Forks、40 Issues、13 PR,MIT 许可,含 1,596 次提交。
更新
Node.js 26.10.0
Node.js 26.10.0(Current)于 2026-09-22 发布,由 Antoine du Hamel(@aduh95)维护,包含多项 SEMVER-MINOR 新功能、大量错误修复与测试优化。
- 🚀 版本发布:Node.js 26.10.0(Current)于 2026-09-22 发布,发布署名 @aduh95
- 🔐 crypto 新增功能:新增
crypto.parsePKCS12(),并为 Web Cryptography 加入混合 KEM 支持 - 📁 ffi 新特性:支持从挂载的虚拟文件系统(VFS)加载库
- 📄 fs 新 API:新增
fs.openAsBlobSync,并改进FileHandle.read、cpSync、rmSync等行为 - 🌐 net 增强:支持将
net.BoundSocket发送到线程和子进程 - 📊 性能钩子:实现
SlidingWindowHistogram与 Histogram 的 QRDE 分析支持 - 🗄️ SQLite 更新:
undefined现绑定为 NULL,并修复 URL 路径、用户自定义函数跟踪等问题 - 🛠️ 工具函数:新增
util.markPromiseAsHandled、util.throttle和util.debounce - 🔄 流与网络修复:修复 stream、HTTP/2、QUIC、TLS 等模块的多项稳定性与内存问题
- 🧪 测试改进:扩展直方图测试覆盖,优化大量测试性能并减少 flaky 情况
- 📦 多平台下载:提供 Windows(x64/ARM64)、macOS(Intel/Apple Silicon)、Linux(x64/PPC64LE/s390x/ARM64)、AIX 等安装包与二进制文件
- 🔑 完整性校验:发布 SHA256 校验和与 PGP 签名,确保下载安全
- ➡️ 下一版本:Node.js 26.9.0(Current)
Deno 2.9 | Deno
- 🚀 Deno 2.9 发布,核心亮点是实验性
deno desktop、更轻松的 Node 项目迁移,以及显著的性能与内存优化。 - 🖥️
deno desktop:从脚本或 Web 框架项目生成原生桌面应用,UI 跑在 webview、逻辑跑在 Deno,最终编译为单个可分发二进制。 - 🧩 支持自动检测 Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start、Vite SSR 等框架。
- 🪟 内置原生桌面 API:
Deno.BrowserWindow、Deno.Tray、Deno.Dock、原生对话框、Deno.autoUpdate(),并支持 webview 与 Deno 之间绑定函数。 - 🌐 两种桌面后端:默认
webview使用系统引擎,体积小启动快;--backend cef内置 Chromium,跨平台渲染一致但体积更大。 - 📦 发行产物复用
deno compile,支持.app/.dmg/.exe/.msi/.AppImage/.deb/.rpm,可通过--target和--all-targets跨平台构建。 - ⚡ 性能大幅提升:冷启动从 34.2ms 降至 17.3ms;
Deno.serverealworld 吞吐提升 1.27x;realworld RSS 从 142MB 降至 64MB。 - 🧠 启动优化包括:懒加载
node:全局、限制 Node 引导到 Node workers、V8 代码缓存、压缩快照和 macOS chained fixups。 - 🧬 HTTP 与热路径优化:新增 Deno 自有 HTTP/1.1 服务路径,
crypto.subtle、console/Deno.inspect部分迁移到 Rust。 - 🎨 支持 CSS 模块导入:
import sheet from "./styles.css" with { type: "css" },返回CSSStyleSheet,需--unstable-raw-imports。 - 🔄 迁移 Node 项目更顺滑:
deno install可直接读取 npm、pnpm、yarn、Bun 的 lockfile,并生成保留精确版本与完整性哈希的deno.lock。 - 🧩 支持 npm/yarn/Bun workspaces,并可自动迁移
pnpm-workspace.yaml中的 packages、catalog、catalogs。 - 🔧 当工具调用
node时,Deno 可提供 PATH shim 转发到自身,并翻译 Node CLI 参数;可用DENO_DISABLE_NODE_SHIM=1禁用。 - 🔗 依赖管理增强:
deno link/deno unlink稳定links字段,deno list类似npm ls,preferPackageJson可让依赖写入package.json。 - 📚 新增
jsrDepsInNodeModules,可通过 npm 兼容注册表把 JSR 依赖安装进node_modules;工作区成员也会生成自己的node_modules/.bin。 - 🛡️ 供应链安全:
min-release-age默认启用 24 小时;新增no-downgrade信任策略,防止维护者令牌被盗后的降级攻击。 - 🧪 测试增强:内置
t.assertSnapshot()、--changed/--related、--retry/--repeats、覆盖率阈值、--shard分片、Deno.test.each参数化测试。 - 🧱
deno compile:新增--include-as-is原样嵌入资源;编译产物可持久化 OpenKv/localStorage/caches;实验性--bundle/--minify显著缩小二进制。 - 📄
deno bundle:新增--declaration生成汇总.d.ts,并支持package.json中 browser 字段的对象形式。 - 🧹
deno fmt:非 JS 格式化改用 lax 引擎;HTML/XML/SVG 默认格式化;CSS/SCSS/Less、SQL 得到新引擎;新增导入导出排序、JSON 尾逗号、.editorconfig支持。 - 🏗️
deno task:支持基于输入指纹的缓存与输出恢复、--jobs并发控制、--if-present、--env-file、任务名排除组通配符。 - 🟢 Node.js 兼容性升级到 Node.js 26:
process.version报告 v26.3.0,裸 Node 内置模块无需 flag,node:test增强,NAPI 版本 10。 - 🔐 Web Crypto 扩展:新增后量子 ML-KEM、ML-DSA、SLH-DSA,以及 ChaCha20-Poly1305、SHA-3/SHAKE/KMAC/Argon2;新增
SubtleCrypto.supports()。 - 🌐
Deno.serve变更:自动压缩默认关闭,需automaticCompression: true或环境变量开启;旧request.signal中止行为弃用。 - 📡 OpenTelemetry 增强:支持采样器、span 属性/事件数量限制,自动插桩扩展到
node:http2。 - 🧰 其他更新:Web Locks API、
navigator.userAgentData、Happy Eyeballs v2、fetchpriority、Deno.watchFsignore、process.kill自身无需--allow-run、WASM global 导出、deno watch子命令。 - 🙏 感谢社区贡献者,完整 PR 列表可在 GitHub 查看;升级命令为
deno upgrade。
设计
Hallmark——一种拒绝看起来像 AI 生成的设计技能
Hallmark 是一个让 AI 生成网页时避免“AI 味”和模板化输出的技能:默认用 Build 生成页面,另有 Study、Audit、Redesign 三种显式能力,并围绕反模式、设计基础与安装方式提供完整工作流。
- 🧪 示例覆盖多种一次性提示:酸面包 App、维修咖啡馆海报、蜂蜜农场落地页、孔版印刷展、实验字体作品集、SaaS、旅游预订、创意工作室、个人站、时尚品牌、API、唱片页、AI 工具、海报节网站等,主题与布局互不共享。
- 🏗️ Build 是默认行为:先选宏结构,再配主题与增强,产出可用、已打标、经“slop 测试”的页面,并拒绝重复最近 3 个宏结构。
- 🔎 Study 可读取截图或 URL 的结构而非像素,输出 DNA 卡;说“lock the DNA”还能生成可移植的
design.md,供其他 AI 工具使用,但不会识别字体或复制像素。 - 🩺 Audit 只诊断不修改:针对页面按反模式目录给出排序后的问题清单,例如紫粉渐变 Hero、Inter 同时做展示与正文、全部居中、闪光 emoji 徽章、渐变胶囊 CTA 等。
- 🔄 Redesign 保留内容与品牌,抛弃结构指纹,以新的版块节奏、标题位置和组件语气重建;“页面就是演示”。
- 🚫 五大反模式包括:紫渐变 Hero、Inter 当展示字体、全部居中、图标方块功能卡、万能 AI 导航;Hallmark 分别以单锚色/单强调色、双字体配对、非对称布局、不对称卡片或去掉图标、按品类选导航来修复。
- 📐 八项基础规则:展示/正文字体配对、OKLCH 调色与单一锚色、4 倍数命名间距、指数缓出与减少动效、主题化语气、非对称布局、可快速读懂的层级、克制(宁缺毋滥)。
- ⚖️ 同一提示对比:无 Hallmark 的 Sonnet 4.6 会默认渐变、通用数据条、虚构 Trustpilot 评分和“10× faster”;加 Hallmark 后可选 Marquee Hero/Atelier/斜体 Fraunces,并使用真实素材、不编造数据。
- 🛠️ 安装运行
npx skills add nutlope/hallmark,可被 Claude Code、Cursor、Codex 自动检测;之后直接让 agent 生成 UI,Hallmark 会自动附加。
Svelte Bits - 适用于 Svelte 的动画 UI 组件
Svelte Bits 是面向创意开发者的 Svelte 动画 UI 组件库,提供 130+ 个高度可定制、即插即用的动画组件与背景,基于 Svelte 5、TypeScript 和 Tailwind,开源免费并支持 AI 编程工具快速集成。
- 🎨 面向创意开发者:高度可定制动画组件和背景,可让项目立即更出彩。
- 🧩 组件丰富:包含 130+ 背景、文字效果、动画和 UI 模式,示例有 DotField、Line Waves、Blob Cursor、Magic Rings 等。
- 🗂️ 分类清晰:分为背景、动画、文字动画、组件四类,便于查找。
- 🛠️ 技术栈统一:每个组件都是类型化的 Svelte 5 组件,并用 Tailwind 编写样式。
- 🤖 AI 友好:适配 Cursor、Copilot、v0,可描述需求后直接放入项目。
- ⚡ 安装便捷:支持 jsrepo 或 shadcn,通过
npx jsrepo add等命令把组件加入代码库。 - 🌐 开源免费:是 React Bits 的 Svelte 移植版,作者为 davidhaz,并有 React Bits、Vue Bits 相关生态。
- ⭐ 社区状态:Svelte 生态较新的创意组件库,当前 GitHub Stars 为 0,鼓励点星关注。
原子设计方法论
本章介绍“原子设计”方法论,借用化学与自然界的层级概念,将用户界面拆解为原子、分子、组织、模板和页面五个阶段,并把它们作为同时协作的思维模型,而非线性步骤,用来构建更清晰、可复用、能适应动态内容的界面设计系统。
- ⚛️ 原子设计受化学和自然界启发,认为界面也可分解为有限的基础元素,再逐层组合成完整系统。
- 🧪 五个阶段分别是:原子、分子、组织、模板、页面,它们共同构成界面设计系统的层级。
- 🔹 原子:界面中最基础、不可再分的 HTML 元素,如标签、输入框、按钮,展示基础样式与固有属性。
- 🔗 分子:由原子组合而成、作为单元运作的简单 UI 组件,例如“标签 + 输入框 + 按钮”组成的搜索表单。
- 🧩 组织:由分子、原子或其他组织组成的较复杂组件,形成界面中的独立区块,如页头、产品网格。
- 🖼️ 模板:页面级对象,把组件放入布局并表达底层内容结构,关注图像尺寸、标题长度等内容骨架。
- 📄 页面:模板的具体实例,填入真实代表性内容,展示最终 UI,并测试设计系统是否有效。
- 🧭 原子设计不是“第 1 步原子、第 2 步分子”的线性流程,而是帮助同时思考整体与部件的思维模型。
- 🎯 它让设计师和开发者能在抽象与具体之间切换,像画家一样在细节笔触与整体构图之间来回审视。
- 🏗️ 它清晰区分结构与内容:模板体现内容骨架,页面呈现最终内容,但二者会相互影响。
- 🏷️“原子、分子、组织”提供了直观层级感,但命名不是教条;团队可按自身文化调整术语。
- 📱 原子设计适用于所有用户界面,不限于 Web,也可用于原生 App、Photoshop、ATM 等软件界面。
- 📸 以 Instagram 为例:图标、文字、图片是原子;导航栏、操作栏是分子;照片流是组织;再组合成模板与页面。
- 🛠️ 原子设计不专指 CSS 或 JavaScript 架构,而是跨技术的 UI 设计系统方法论;后续章节将讨论落地工具与流程。
其他
高级工程师死亡螺旋
高级工程师在新岗位、晋升或接手大项目后,常因冒充者综合征而急于证明自己,试图模仿更高级别工程师、独自推进宏大方案,结果逐渐失联、硬扛压力,最终滑向倦怠甚至离职的“死亡螺旋”;破解之道是暂时“降一级”、成为最好的队友,转向以势头和日常节奏为核心,通过持续沟通、可靠交付和修复关系来重建信任与耐力。
- 🌀 触发点常是新工作、晋升或大项目:想立刻证明自己,于是设计更宏大的东西,甚至“扮演”更资深的工程师。
- 🕳️ 人会开始长时间消失,站会只说“进展顺利、很快有东西可展示”,但实际拿不出成果。
- 😰 内心压力升级为“我得更努力,把进度补回来”,随后失眠、漏餐、抑郁,工作和个人关系都受损。
- 🔥 螺旋终点可能是倦怠休假、绩效改进计划(PIP)、被解雇或主动辞职。
- 🌐 疫情、远程办公和编码代理让工程师更孤立、更少结构化支持,因此不能让同事不知道你在做什么。
- 🗣️ 要主动分享工作,做到“大家都知道你在忙什么”,但不必显得惹人厌。
- 🤝 从假设周围人都在善意合作开始:公司雇用的是现在的你,不是六个月后你想象中的自己。
- ⬇️ 反直觉做法是先“降一级”,成为最好的队友,做 bug、杂活、文档和组织性工作,帮助团队。
- 🚀 从结果导向转为势头导向:建立日常节奏,修复关系,获得耐力和信任。
- 🏃 大项目不靠一次性大爆发,而像马拉松一样,每天、每小时持续稳定推进,直到成为肌肉记忆。
- 📈 可靠性和信任会让队友与经理愿意交给你更大的任务;你在经营声誉,软件成果只是下游结果。
我该如何向不是我下属的人提供反馈?
本文讨论如何向没有管理权限的人提供反馈:关键不是权威,而是“正当性”。应从共同工作的交界处出发,描述观察到的事实及其影响,避免评判对方,保持双向沟通,明确自己想要什么,并接受对方可能不同意或补充你未知的信息。
- 🎯 有正当理由再提反馈:对方行为影响你的工作、共同结果或你负责的事项时,你通常有立足点。
- 👀 从观察开始:区分实际发生的事与你对对方的推断,避免把解释当成事实。
- 🔗 聚焦工作交界处:说明问题如何发生在你们职责、决策或流程相接的地方。
- ⚖️ 让观点可检验:少说“你不合作”,多说具体事件、时间线和造成的后果。
- 🧠 留出未知空间:承认自己的视角可能不完整,主动问“我可能漏掉了什么?”
- 🔄 反馈应双向流动:愿意听对方如何看待你在这件事中的影响。
- 🚫 别把指令伪装成反馈:若没有正式权限,要区分告知、询问、请求和工作协议。
- 🗣️ 明确你的诉求:想要对方知晓、理解其视角、改变合作方式,还是需要具体行动?
- 🤝 对方不同意时:先了解分歧,不要靠层级施压;必要时清楚说明自己的边界与依赖。
- 🧭 无管理权不等于无边界:若后果足够重要,仍可通过适当渠道升级处理。
- 📚 研究支持:来源可信度、信任和互惠关系会影响反馈是否被接受和处理。
- ❓ 五个自问:我为何有资格提?我观察到什么?如何影响共同工作?我可能不了解什么?我是否也愿听对方对我的反馈?
- 🧩 核心结论:权威是一种反馈依据,相互依赖是另一种;真正重要的是提供有用、相关、具体的信息,并保持开放。