- Published on
2026-第二十周
- Authors

- Name
- AgedCoffee
- @__middle__child
该周报主要为各个地方内容的汇总整理
- 技术
- 自学前端开发者的编程原则 - Piccalilli
- 深入解析新版 Raycast 的技术细节 - Raycast 博客
- Node.js 事件循环:阶段、微任务与 libuv
- 开发者工具:如何通过影子 DOM 进行查询
- 糟糕软件设计的症状 - 作者:Marcos F. Lobo 🗻🧭
- AI 时代的敏捷 - Miren
- 工具
- GitHub - counterfact/api-simulator:不仅仅是模拟服务器。将OpenAPI规范转化为基于TypeScript的模拟,具备状态管理、热重载和REPL功能。
- GitHub - pionxzh/wakaru: 🔪📦 现代前端的 JavaScript 反编译器 · GitHub
- border-beam
- Lightswind UI
- 更新
- styled-components v7 | styled-components
- Bun v1.3.14 | Bun 博客
- 发布 v1.60.0 · microsoft/playwright · GitHub
- 其他
- TBM 417:在因 AI 解雇所有“粘合剂型员工”之前
技术
自学前端开发者的编程原则 - Piccalilli
本篇文章为自学前端开发者总结了实用的编程原则,帮助写出更清晰、易维护的代码。
- 📚 “三次法则”:代码重复三次后才进行重构或优化,避免过早优化和过度设计。
- 🛠️ “先让它工作,再让它正确,最后让它快”:按优先级依次处理代码的正确性、合理性和性能,避免浪费精力。
- 🧩 幂等性:函数对相同输入始终返回相同输出,简化推理和调试。
- 🎯 单一职责原则:每个函数或模块只负责一个任务,便于修改和删除。
- 📊 单一抽象层级:函数内所有操作应处于相同细节水平,提升可读性。
- 🚫 避免过早优化:先构建简单可工作的系统,再逐步迭代复杂化。
- 🔁 DRY(不重复自己)与 YAGNI(你不会需要它)的平衡:通过“三次法则”实际应用,避免过度抽象或冗余代码。
深入解析新版 Raycast 的技术细节 - Raycast 博客
Raycast 2.0 是一次从底层重写的跨平台版本,旨在同时支持 macOS 和 Windows,并保持快速、愉悦和熟悉的用户体验。
- 🚀 采用混合架构:使用 TypeScript、Swift、C#、Rust、Node 和 React 构建,结合原生外壳与系统 WebView,实现跨平台 UI 和深度 OS 集成。
- 🔄 重写原因:从启动器扩展到生产力平台后,原始架构限制开发速度,且为支持 Windows 和未来功能,必须重新设计。
- 🧩 四层结构:包括原生宿主应用(Swift/C#)、Web 前端(React + TypeScript)、Node 后端和 Rust 核心,各层通过类型化 IPC 通信。
- 🗂️ 新文件索引器:用 Rust 自建索引器,直接扫描文件系统,支持 NTFS MFT 快速扫描,摆脱 Spotlight 依赖。
- 🎯 原生体验优化:通过调整 WebKit 行为(如禁用节流、预渲染)、遵循平台惯例(无光标指针、无悬停高亮),消除闪烁和卡顿。
- 💾 内存权衡:v2 内存占用约 350-450 MB(高于 v1 的 200-300 MB),但通过压缩内存、共享框架和积极优化,确保系统压力绿色。
- ⚡ 性能提升:搜索更快(集成 Rust 文件索引),文本渲染更佳(WebKit 优化),开发速度因热重载显著加快。
- 🌍 跨平台优势:大多数产品工作在共享前端和后端完成,一次开发支持 macOS 和 Windows,扩展无需额外下载 Node。
- ⚖️ 挑战:内存基线高、栈复杂度增加、Windows 多样性需测试更多边缘情况、部分原生功能(如窗口冷启动)需额外工作。
- 🎉 公开测试:团队认为权衡值得,未来将专注降低内存、优化性能,并继续推动桌面生产力创新。
Node.js 事件循环:阶段、微任务与 libuv
Node.js 事件循环由 libuv 的循环阶段和 Node 的 JavaScript 端优先级队列共同驱动。定时器、I/O 回调、check 回调、close 回调、Promise 反应以及 process.nextTick() 回调都有不同的队列和清空点。核心规则是:JavaScript 运行在单个调用栈上,当栈被占用时,没有排队回调能运行。栈清空后,Node 会在定义的点清空高优先级队列,然后让 libuv 进入其阶段。
- 🧠 单调用栈:JavaScript 执行的基础是 LIFO 调用栈,一次只做一件事。阻塞就是某个函数长时间占据栈顶,导致其他所有操作被冻结。
- ⏱️ 事件循环阶段:libuv 的循环包括六个阶段:定时器、待处理回调、空闲/准备、轮询、检查、关闭回调。每个阶段按 FIFO 顺序处理其宏任务队列。
- 🔄 微任务与宏任务:微任务(
process.nextTick和 Promise 任务)优先级高于宏任务。每个宏任务执行后,会立即清空所有微任务队列,再进入下一阶段。 - ⚡ nextTick 的陷阱:
process.nextTick是最高优先级的微任务,但递归调用会饿死事件循环,阻止定时器和 I/O 运行。 - 📂 I/O 与线程池:文件系统和部分加密操作通过 libuv 线程池(默认 4 个线程)异步执行。线程池是共享资源,可能成为瓶颈。
- 🛠️ 性能优化:避免同步阻塞(如
JSON.parse、复杂正则),使用setImmediate分块处理 CPU 密集型任务,或用worker_threads实现真正并行。 - 🔍 调试工具:使用
setInterval延迟检查、perf_hooks.monitorEventLoopDelay或async_hooks监控事件循环延迟。 - 🧩 setTimeout vs setImmediate:在主模块中顺序不确定(取决于启动时间),但在 I/O 回调中
setImmediate总是先执行(因为它在检查阶段运行)。 - 🗑️ 垃圾回收影响:V8 的“停止世界”GC 会冻结事件循环,良好内存管理(如使用流)可减少停顿。
开发者工具:如何通过影子 DOM 进行查询
开发者工具提供了一种便捷方法,用于查询穿透 Shadow DOM 的元素,极大简化了调试和样式修改过程。
- 🔍 开发者工具中新增
$$$函数,用于穿透 Shadow DOM 进行元素查询 - 📚 该函数类似于已有的
$(querySelector)和$$(querySelectorAll),但能深入嵌套的 Shadow DOM - 🎯
$$$支持第二个参数作为上下文,例如$$$('ha-card', $0)可基于当前选中节点查询 - 💡 这一技巧由 Keith Cirkel 分享,对调试和样式开发非常实用
糟糕软件设计的症状 - 作者:Marcos F. Lobo 🗻🧭
软件设计中存在四种常见的不良信号:刚性、脆弱性、不动性和粘滞性,它们会导致系统难以维护和扩展,但可以通过设计模式、封装和自动化等方法解决。
- 🔒 刚性:系统难以修改,一处改动引发连锁反应。解决方案是使用策略模式解耦,遵循开闭原则。
- 💥 脆弱性:修改一处代码导致多处意外故障。解决方案是封装和接口隔离,避免全局状态和隐藏依赖。
- 🧱 不动性:代码难以复用,因与特定环境深度绑定。解决方案是分层架构,将业务逻辑与框架和数据库分离。
- 🐌 粘滞性:走捷径比遵循正确设计更容易。解决方案是自动化工具和优化开发环境,让正确做法更便捷。
AI 时代的敏捷 - Miren
AI 时代下,敏捷的核心原则(沟通、短反馈循环、可持续节奏)依然有效,但参与者已从人类开发者变为人类与 AI 协作。关键在于调整工作单元大小、强化同步点、保持人类审查,并警惕认知过载和过度工作文化。
- 🤖 AI 改变角色,但未改变原则:人类从代码作者转为编辑/导演,与 AI 形成新的嵌套反馈循环,但敏捷的核心(人与人沟通、短周期)依然适用。
- 🔄 同步点比以往更重要:AI 能快速生成大量代码,但人类注意力有限。工作单元应定义为“一次会议能讨论的内容”,避免过大的 PR 导致审查流于形式。
- 👁️ 审查是共享理解,而非形式:AI 生成代码速度过快可能导致审查变成“橡皮图章”。审查的真正价值在于建立团队对代码的共同理解,而非仅抓 bug。
- 🧠 认知天花板真实存在:人类能有效管理的 AI 代理数量有限(约 3 个),超过则会增加压力和错误。追求管理更多代理并非目标,可持续的协作才是。
- ⏳ 可持续节奏优于产出:AI 工具让人容易无意识进入 100% 工作状态,但人类需要可持续的节奏(如 70-80%)。更好的工具应带来更好的结果,而非更长的工时。
- 🛠️ 实践建议:定义完成标准、合理拆分工作单元、坚持人类审查、优先节奏而非产出。敏捷原则未过时,只需适应 AI 参与的新现实。
工具
GitHub - counterfact/api-simulator:不仅仅是模拟服务器。将OpenAPI规范转化为基于TypeScript的模拟,具备状态管理、热重载和REPL功能。
Counterfact 是一个基于 OpenAPI 规范的 API 模拟器,提供有状态、可热重载且支持运行时控制的 TypeScript 仿真环境。
- 🚀 支持 Swagger 2.0、OpenAPI 3.0/3.1/3.2,快速生成有状态 API
- 🔧 提供类型安全的 TypeScript 端点处理器,支持热重载
- 🔗 跨路由共享状态,内置 REPL 可运行时控制行为
- 🔄 可选代理到真实后端,灵活适配开发与测试场景
- 🎯 面向前端开发者、测试工程师和 AI 代理,兼具真实性与可用性
- 📦 通过
npx counterfact@latest快速启动,需 Node ≥ 22.0.0 - 📚 提供详细文档、示例仓库和对比指南(json-server、WireMock 等)
- ⭐ GitHub 上获得 144 星,20 个 fork,127 个发布版本
GitHub - pionxzh/wakaru: 🔪📦 现代前端的 JavaScript 反编译器 · GitHub
Wakaru 是一款用于现代前端的快速 JavaScript 反编译器与包拆分工具,能处理被打包、转译和压缩的代码,将其还原为可读的模块。
- 🔪 支持包拆分:兼容 webpack 4/5、esbuild、Bun、Browserify 等打包工具
- 🔄 转译与压缩还原:可恢复 Terser、Babel、SWC、TypeScript 处理后的代码
- 🗺️ 源码映射支持:利用 source map 改善标识符命名并去重导入
- 📊 三级重写选项:提供 minimal、standard、aggressive 级别,平衡可读性与准确性
- 🚀 快速上手:通过
npx @wakaru/cli或安装全局 CLI 即可使用 - 🛡️ 覆盖保护:默认不覆盖已有文件,需
--force参数 - 🤝 鼓励贡献:欢迎报告问题、分享真实用例,并遵循 Conventional Commits 规范
- 📜 许可协议:Apache-2.0,禁止用于未经授权的攻击行为
border-beam
border-beam 是一个 React 动画边框组件,可以给卡片、按钮、输入框和搜索框加上沿边框移动的光束效果。它会包裹现有内容,并自动读取第一个子元素的圆角,适合用来强化重点区域或交互入口。
- ✨ 提供
sm、md、line三种尺寸,覆盖完整边框光效和底部线性光效 - 🎨 内置 colorful、mono、ocean、sunset 四种配色,并支持深色、浅色和系统主题
- 🎚️ 可配置强度、动画时长、边框半径、亮度、饱和度和色相范围
- ⏯️ 支持播放、暂停和淡入淡出回调,方便和组件状态联动
- ♿ 光效层不拦截指针事件,作为纯装饰层叠加在内容外侧
Lightswind UI
Lightswind UI 是一套面向 React 的动画组件库,提供 CLI、组件、区块和模板。它采用类似 shadcn/ui 的复制源码模式,组件会安装到项目中,适合快速搭建带动效的后台、落地页和内容页面。
- 🧩 提供 160+ 个组件,覆盖 3D 元素、背景、按钮、文本效果、表单、布局和导航
- ⚙️ CLI 支持初始化项目、按名称添加组件、按分类批量添加组件和查看组件列表
- 🧠 自动识别 Next.js、Vite 和 Create React App,并处理目录与 Tailwind 配置
- 🎬 基于 Tailwind CSS、Framer Motion 和 GSAP 构建,偏重视觉动效和交互表现
- 🛠️ 只安装所选组件需要的依赖,保留组件源码的可定制空间
更新
styled-components v7 | styled-components
styled-components v7 是一次重大的架构改革,引入了自研 CSS 解析器,重写了原生运行时,并致力于实现 Web、iOS 和 Android 上统一的 CSS 体验。该版本带来了许多新特性,包括现代 CSS 支持、原生动画、改进的插件系统等,但需要 React 19+ 和 React Native 0.85+ 作为依赖。
- 🚀 重大架构更新:用自研 CSS 解析器替换了 stylis,重写了原生运行时,旨在实现跨平台一致的 CSS 体验。
- 🎨 React Native 现代 CSS 支持:支持
@media、@container查询、现代颜色空间、数学函数、视口单位、渐变和滤镜等。 - 🔗 React Native 选择器和组合器:支持属性选择器、
:not()、:has()、树结构伪类以及组件间的组合器。 - ✨ 原生动画默认启用:
transition、@keyframes和@starting-style现在默认在 React Native 上通过内置的Animated适配器运行。 - 🎭 原生平台
createTheme():与 Web 版相同的createTheme()和<ThemeProvider>,支持主题深合并。 - 🔌 插件系统重构:插件移至
styled-components/plugins子路径,提供了新的SCPlugin接口,替代了旧的 stylis 插件。 - 🏎️ 性能与 SSR 优化:全局样式只生成一次,SSR 在大规模场景下更快,并提供了
extractCSS()方法。 - ⚠️ 破坏性变更与迁移:移除了
defaultProps、disableCSSOMInjection和enableVendorPrefixes,需要更新依赖版本(React 19+,React Native 0.85+)。 - 📱 React Native 的 CSS 重映射:通过
.attrs((props, ast) => ...)函数形式,可以将 CSS 声明映射到原生组件的 props 上。 - 🧩 React Native 的已知限制:部分 CSS 特性(如
::before/::after、backdrop-filter、CSS Grid 等)在原生平台上尚不支持。
Bun v1.3.14 | Bun 博客
Bun 发布了重大更新,引入了内置图像处理 API、HTTP/3 支持、实验性 HTTP/2 客户端、全局虚拟存储、改进的文件监视系统、父进程死亡自动退出功能,以及大量性能优化和错误修复。
- 🖼️ 内置图像处理 - Bun.Image 提供链式图像处理管道,支持 JPEG、PNG、WebP、GIF、BMP 等格式,无需安装任何原生模块,性能比 sharp 快 1.2-70 倍
- 🌐 HTTP/3 (QUIC) 支持 - 通过
http3: true标志启用,性能比 HTTPS/1.1 快 2.7 倍,支持流式传输、文件响应和请求体透传 - 🔄 实验性 HTTP/2 客户端 - fetch() 支持 HTTP/2 多路复用,多个并发请求共享单个 TCP+TLS 连接,支持连接合并和流控制
- 🚀 实验性 HTTP/3 客户端 - fetch() 支持 HTTP/3 协议,可通过
protocol: "http3"选项启用,支持 Alt-Svc 自动升级 - 💾 全局虚拟存储 - bun install 新增
globalStore选项,将包链接到全局目录而非每个项目复制,安装速度提升 7 倍 - 👁️ 文件监视重写 - fs.watch() 在 Linux/macOS/FreeBSD 上完全重写,支持递归监视新创建目录,修复了多个长期存在的 bug
- 👻 --no-orphans 功能 - 父进程死亡时自动退出,并递归终止所有子进程,支持 Linux 的 prctl 和 macOS 的 kqueue
- ⚡ 性能优化 - Zig↔C++ 跨语言 LTO 优化使 HTTP 吞吐量提升 3.5%,ESM 模块加载速度提升 12%,减少 GC 开销和二进制体积
- 🛠️ Node.js 兼容性改进 - 修复了 node:http、node:zlib、crypto、TLS 等多个模块的内存泄漏和崩溃问题
- 🪟 Windows 增强 - Bun.Terminal 通过 ConPTY API 支持 Windows,SIGHUP/SIGBREAK 信号处理,改进系统 CA 证书加载
- 📦 bun publish 改进 - 现在自动发送 README 元数据到 npm 注册表,确保包描述正确显示
- 🔒 安全修复 - 修复了 HTTP 请求走私、Blob 反序列化边界检查、IPC 序列化整数溢出等安全问题
- 🐛 大量 Bug 修复 - 修复了超过 100 个 bug,涵盖 Bun Shell、WebSocket、Worker、定时器、bun install、打包器、CSS 解析器等
发布 v1.60.0 · microsoft/playwright · GitHub
Playwright v1.60.0 版本发布,带来多项新功能和改进。
- 🌐 HAR 录制集成到 Tracing API,支持通过
tracing.startHar()/tracing.stopHar()进行录制,并可使用await using自动管理生命周期。 - 🪝 新增
locator.drop()API,模拟文件或剪贴板数据拖放到元素上,支持跨浏览器测试上传区域。 - 🎯 Aria 快照功能扩展,
expect(page).toMatchAriaSnapshot()现支持在 Page 上使用,并新增boxes选项输出元素边界框。 - 🛑 新增
test.abort()方法,可在 fixture、hook 或路由处理器中立即中止测试并附带可选消息。 - 🆕 新增多个 API,包括浏览器上下文事件、定位器选项(如
description和pseudo)、网络功能(如webSocketRoute.protocols())以及错误报告增强。 - 🛠️ 其他改进包括 HTML 报告器支持直接打开
.zip文件、Trace Viewer 新增 JSON 格式化切换、以及测试配置错误提示优化。 - ⚠️ 移除多个长期弃用的 API,如
Locator.ariaRef()、handle选项和logger选项等。 - 🖥️ 更新浏览器版本至 Chromium 148.0.7778.96、Firefox 150.0.2、WebKit 26.4,并测试兼容 Google Chrome 147 和 Microsoft Edge 147。
其他
TBM 417:在因 AI 解雇所有“粘合剂型员工”之前
本文探讨了在引入 AI 时,企业应谨慎对待“胶水人员”(承担协调、沟通、隐性工作的人)的裁员风险,强调 AI 能解决表面任务,却可能破坏深层的判断力、社会关系和适应能力。
- 🧠 核心论点:AI 适合处理“已知应做但因成本未做”的任务(如优化发布说明),但无法替代胶水人员的隐性工作(如判断时机、建立信任、协调冲突)。
- ⚠️ 风险警示:企业常因 AI 能生成文档、报告等“可见产出”,而错误认为可裁掉胶水人员,却忽略了其背后 80% 的隐性价值(如政治导航、弱信号读取),导致数月后结构性问题爆发。
- 🔍 诊断方法:在自动化前,需用“能力 - 机会 - 动机”(COM-B)模型分析行为障碍。若障碍是时间或流程摩擦(物理机会),AI 有效;若涉及能力不足、社会阻力或动机缺失,AI 只会制造虚假进展。
- 📉 常见陷阱:AI 可能加速“产出”却无人消费(如风险日志无人使用);或让组织误以为解决了问题,实际只是转移了瓶颈(如从生产转向解读或行动)。
- 💡 行动建议:尊重冰山模型(可见产出仅 20%),先诊断根本障碍,再观察 AI 是否仅解决第一环节而忽略后续链条(如反馈循环、系统设计)。
- 🏢 组织教训:裁掉胶水人员后,其预防问题的工作因隐形而未被察觉,数月后问题爆发时已无法追溯原因,造成结构性损伤。