Published on

2026-第二十六周

Authors

该周报主要为各个地方内容的汇总整理

技术

<Fragment>(<>...</>)– React

<Fragment>(常写作 <>...</>)用于在不添加额外 DOM 节点的情况下对元素进行分组。Canary 版本支持 ref,允许直接操作 Fragment 内的 DOM 节点。

  • 📦 核心用途:使用 <>...</><Fragment> 将多个元素分组,无需包装节点,且不影响布局样式。
  • 🔑 Key 属性:在循环中渲染 Fragment 列表时,必须使用显式 <Fragment key={...}> 语法,不能使用 <>...</>
  • 🆕 Canary 特性:Fragment 支持 ref,提供 FragmentInstance 对象,用于操作内部 DOM 节点。
  • 🎯 事件监听:通过 addEventListenerremoveEventListener 管理 Fragment 内所有第一级 DOM 子元素的事件。
  • 🔄 焦点管理focus()focusLast()blur() 方法可深度优先搜索并管理 Fragment 内所有嵌套子元素的焦点。
  • 📜 滚动控制scrollIntoView(true/false) 可滚动 Fragment 的第一个或最后一个子元素到视图中。
  • 👁️ 可见性观察:使用 observeUsingunobserveUsing 附加或分离 IntersectionObserverResizeObserver
  • 🗂️ 缓存优化:通过 reactFragments 属性(每个 DOM 子元素上的 Set)实现全局 IntersectionObserver 共享,避免重复创建。
  • ⚠️ 注意事项scrollIntoView 不接受对象参数;observeUsing 不适用于纯文本子元素;addEventListener 不会应用于隐藏的 <Activity> 树。

window.showDirectoryPicker 开启了一个全新的世界

Chrome 的新 API window.showDirectoryPicker() 让网页应用能直接读写用户本地文件夹,开启本地优先应用的新可能。

  • 📂 本地优先应用:用户可授权网站访问本地文件夹,如笔记应用直接操作 Markdown 文件,数据归用户所有而非云端存储。
  • 🎨 仿 Aperture 界面:利用该 API 创建类似苹果 Aperture 或 Lightroom 的 UI,网页应用能管理本地照片,支持创建文件夹和移动文件。
  • 🖼️ 照片视频编辑:浏览器内实现强大的照片/视频编辑应用,直接处理本地源文件,已有 WebGPU 视频编辑器在探索此方向。
  • 🧩 节点合成应用:基于苹果 Shake 灵感,创建节点式合成应用,可绘制多边形并叠加到源图像上。
  • 🤖 零手写代码:以上所有功能均通过 AI(如 Claude)生成,无需手动编写代码,展示了技术发展的惊人之处。

工具

OpenKB

OpenKB 是一个开源知识库系统,利用 LLM 将原始文档编译成结构化的维基风格知识库,采用 PageIndex 的无向量、基于推理的检索技术,支持长文档处理、原生多模态和无需向量数据库。

  • 📚 核心定位:OpenKB 是一个开源 CLI 工具,通过 LLM 将原始文档自动编译为相互链接的维基风格知识库,基于 Andrej Karpathy 的概念实现知识的持续积累而非每次查询重新推导。
  • 🎯 与传统 RAG 的本质区别:传统 RAG 每次查询都从零开始发现知识,没有知识积累;而 OpenKB 一次性将知识编译为持久化维基,持续更新,交叉引用已存在,矛盾被标记,综合反映所有已消费内容。
  • 🔧 核心特性:支持 PDF、Word、Markdown、PPT、HTML、Excel、CSV、URLs 等多种格式;通过 PageIndex 树索引处理长文档;原生多模态支持(图表、表格、图像);自动编译为摘要、概念页、实体页和交叉链接。
  • 🚀 快速上手:通过pip install openkb安装,使用openkb init初始化知识库,openkb add添加文档,openkb queryopenkb chat进行问答交互。
  • ⚙️ 工作原理:架构分为两层——维基基础层(编译和管理知识)和生成器层(查询/聊天/Skill Factory)。短文档由 LLM 全文读取,长 PDF 通过 PageIndex 树索引后 LLM 读取文档树。
  • 🛠️ Skill Factory:旗舰生成器,可将维基内容蒸馏为可重新分发的智能体技能,支持 Claude Code、Codex 和 Gemini 原生安装使用。
  • 🔗 集成能力:与 Obsidian 原生兼容(支持图视图),支持 Claude Code、Codex CLI 和 Gemini CLI 的智能体集成,采用 Google OKF 规范。
  • 🏗️ 技术栈:基于 PageIndex(无向量推理检索)、markitdown(通用格式转换)、OpenAI Agents SDK、LiteLLM(多提供商 LLM 网关)、Click(CLI 框架)和 watchdog(文件监控)。
  • 📊 未来路线图:扩展非 PDF 格式的长文档处理、支持大规模文档集合的嵌套文件夹、层次化概念索引、数据库存储引擎、Web UI 界面。

GitHub - ryanntannn/zustand-sync:一个简单、基础的zustand“多人协作”中间件

zustand-sync 是一个用于在多个客户端间同步 zustand 状态存储的轻量级中间件,基于 JSON Patch 实现状态变更的传输。

  • 🎯 核心功能:通过中间件和 WebSocket 传输层,实现 zustand 状态在多个客户端间的实时同步
  • 🔧 技术原理:使用 JSON Patch(RFC 6902)将状态变更转化为补丁,通过传输层广播给其他客户端
  • 🚀 快速上手:安装 npm 包并运行 Docker 服务器,然后使用 syncStoreMiddleware 和 WebSocketTransportProvider 配置状态存储
  • 📋 路线图计划:包括 WebSocket 服务器、存储提供者、其他传输方式(WebRTC、HTTP 长轮询)、认证授权、冲突解决和离线支持
  • 📊 项目状态:获得 221 颗星,3 个分支,主要使用 TypeScript(51.3%)和 Go(24.2%)开发
  • 🏷️ 主题标签:状态管理、多人协作、zustand

更新

Astro 7.0 | Astro

Astro 7 正式发布,专注于性能提升,带来了多项重大更新,包括 Rust 重写的编译器、更快的 Markdown 处理、新的渲染引擎、高级路由、缓存功能和对 AI 开发的支持。

  • 🚀 性能大幅提升:构建速度提升 15-61%,部分站点甚至快两倍以上。这得益于 Rust 重写的 .astro 编译器、新的 Rust Markdown/MDX 处理管道、更快的队列式渲染引擎,以及升级到 Vite 8 和其新的 Rolldown 打包工具。
  • 🦀 Rust 编译器:全新的 .astro 编译器完全用 Rust 编写,不再进行 HTML 修正,对未闭合标签等错误更严格,并采用 JSX 风格的空白处理方式。
  • 📝 Rust 驱动的 Markdown 与 MDX:默认使用新的 Rust 处理器 Sätteri,它原生支持 GFM、数学公式、标题 ID 等多种 Markdown 特性,无需额外插件,显著加快 Markdown 密集型站点的构建。
  • ⚙️ 队列式渲染:新的队列式渲染引擎取代了递归方法,速度提升约 2.4 倍,并且内存占用更少。
  • 🗺️ 高级路由:新增 src/fetch.ts 入口点,允许开发者通过标准 fetch 处理器模式完全控制 Astro 的请求管道,并兼容 Hono 框架,可灵活组合中间件。
  • 💾 路由缓存与 CDN 缓存:稳定了路由缓存功能,提供平台无关的 Astro.cache API。新增对 Netlify、Vercel 和 Cloudflare 的实验性 CDN 缓存提供商支持,可将缓存指令推送至边缘网络。
  • 🤖 AI 增强:为 AI 编码代理优化开发体验,包括可后台运行的开发服务器(astro dev --background)、自动检测代理环境、以及可配置的 JSON 日志输出,便于机器解析。
  • 🎉 社区与升级:感谢所有贡献者。现有项目可通过 @astrojs/upgrade CLI 工具升级,新项目使用 npm create astro@latest 创建。

Vite 8.1 发布!| Vite

Vite 8.1 已发布,带来多项实验性功能和性能改进,旨在提升大型应用的开发体验。

  • 🚀 实验性打包开发模式:通过 --experimental-bundle 或配置 experimental.bundledDev: true 启用,可将打包引入开发过程。测试显示,加载 10,000 个 React 组件时,启动速度提升约 15 倍,全页重载快约 10 倍,同时保持即时 HMR,尤其适合大型应用。
  • 🧩 实验性块导入映射:利用导入映射解决输出包中块哈希级联变化的问题,提高缓存效率。基于 Rolldown 功能构建,但注意当前不支持 experimental.renderBuiltUrl
  • 🌐 Wasm ESM 集成支持:现在可直接导入 .wasm 文件并使用其导出函数,例如 import { add } from './add.wasm',简化 WebAssembly 使用。
  • 更接近默认使用 Lightning CSS:Vite 8.1 新增了 PostCSS 中已有的功能(如外部 CSS 文件导入和插件注册文件依赖),为未来默认切换做准备。可通过 css.transformer: 'lightningcss' 试用。
  • 🔍 import.meta.glob 不区分大小写匹配:新增 caseSensitive: false 选项,用于不区分大小写地匹配文件。
  • 🖼️ 自定义 HTML 元素和属性资产发现:通过 html.additionalAssetSources 选项,可为自定义元素(如 <html-import>)和属性(如 data-src-dark)指定资产来源,扩展资产发现范围。
  • 📈 下载量增长:Vite 8 每周下载量达 4160 万次,接近 Vite 7 的总和,社区贡献者超过 1200 人。

Jarred-Sumner 的 JavaScriptCore 共享内存线程(实验性,尚未完成)· 拉取请求 #249 · oven-sh/WebKit · GitHub

这是一个为 JavaScriptCore 引擎添加实验性共享内存线程支持的 Pull Request,旨在让 JavaScript 拥有真正的多线程能力,而非依赖 Web Workers 的消息传递模型。

  • 🧵 核心 API:new Thread(fn) 在另一个核心上运行函数,共享同一堆内存和对象,无需结构化克隆或消息传递,通过 join()asyncJoin() 获取结果。
  • 🚀 并行能力:支持并行 map、共享缓存、原子操作 (Atomics.* 扩展至普通对象属性)、取消标志、实时进度追踪,以及基于 LockCondition 的条件变量同步。
  • 🏗️ 设计基础:基于 Filip Pizlo 2017 年的设计,使用 TID 标记的扁平蝴蝶结、分段蝴蝶结、每对象单元锁和线程本地监视点,以最小化非共享代码的性能开销。
  • ⚙️ 实现状态:已完成两阶段中的第一阶段(GIL 下),第二阶段(移除 GIL)正在进行中。线程测试套件在真实并行下通过,但尚未完成模糊测试、线程清理器修复和长期稳定性测试。
  • 📊 性能与权衡:非共享代码性能损失约 0.45%;共享写入较慢;GC 在共享模式下目前是同步的;内存占用比 Worker 低得多(~150KB–1MB 对比 5–15MB)。
  • 🧪 测试与验证:包含约 95 个测试的套件、线程清理器零未抑制报告、一个可扩展性基准测试(在 16 线程时 JavaScript 性能约为 Java 的 0.89 倍),以及一个包含 20 个 CVE 机制类的审计。

其他

以造福他人的方式来提升自己。这才是我们所追求的。

-- 《我们为什么雇佣初级工程师》


工程领导力修订规则 | 非理性繁荣

本文作者基于在超高速增长环境中的经验,修订了工程领导力的规则,强调个人主导迁移、优化开发工具链、自动化流程、持久团队和快速决策的重要性,并通过具体项目验证了这些规则。

  • 🚀 迁移可由个人主导:复杂变更可由个人或小团队完成 95%,耗时减少 90%,但质量要求更高,因为小错误会破坏团队心智模型。
  • ⚙️ 工作代码成本取决于开发工具链:代码编写成本降低,但有效代码仍需良好测试、CI/CD 等工具链支持,非技术人员参与需安全边界。
  • 🤖 优化流程基线以适配智能体:多数流程步骤可自动化,如代码审查的基线由工具完成,人类专注于高风险领域;规划应提升到更高层次。
  • 👥 持久高所有权团队更重要:积累领域上下文和团队凝聚力,即使 AI 时代,仍需团队确保做正确的事,而非依赖少数天才工程师。
  • 🧠 快速、良好、持久的决策是 AI 受益前提:决策速度和质量决定能否利用 AI,CTO 需更技术化,减少官僚化,以做出绑定决策。
  • 🔧 实践案例:部署频率从每周 6 次增至 200-400 次;100% 团队使用 AI 工具;配置机制统一为两种;前端代码全静态类型化;npm 迁移至 pnpm。
  • 📉 低质量 AI 输出有害:未经验证的“草稿”PR 和设计文档会污染模型,导致更差结果;管理者直接验证变更才有效。
  • 🛠️ 自动化客户支持:用智能体自动分类问题,保留人工处理边缘案例;代码审查首轮由工具完成,人类聚焦高价值反馈。
  • 📊 持久团队带来持续改进:如 SierraAI 团队不断迭代产品,没有专注团队则无法捕捉机会。
  • 🗳️ 争议决策需高层拍板:如配置变更、CI/CD 重构、前端单仓统一等,底层推动困难,需执行层快速决策。

如何建立强大的内部人脉?| 安迪·罗伯茨 – 高管教练 | 领导力培训师 | 引导师

在矩阵组织中,领导者真正的优势不在于正式职权,而在于精心构建的人际网络。本文探讨了如何通过战略性投资于关系网络,来提升影响力、获取信息并推动协作。

  • 🔗 正式组织架构与实际工作流动之间存在巨大差距,仅 3-5% 的员工承担了 20-35% 的协作价值,而只有 9% 的领导者真正理解内部网络如何运作。
  • 🧠 网络质量比规模更重要。关键不是拥有最多连接,而是占据“结构洞”位置——连接原本不相连的群体,从而获得非冗余信息和多元视角。
  • 🤝 “弱连接”具有独特战略价值。与频繁互动的强连接不同,弱连接能带来新信息和新机会,但远程工作正在削弱这种连接,需要刻意维护。
  • 👥 网络中有四种关键角色:中心连接者(信息枢纽)、边界跨越者(连接不同群体)、信息经纪人(跨群翻译)和外围专家(被低估的专家)。识别并善用他们至关重要。
  • 🌐 网络多样性是绩效变量。同质化网络形成回音室,而跨职能、跨地域、跨层级的多样化网络能带来更好的决策和创新。
  • ⏳ 关键关系必须在需要之前建立。信任通过长期互动积累,无法在危机时刻临时制造。持续给予而不计回报,才能建立最牢固的社会资本。
  • 📝 实用行动包括:绘制个人网络图找出空缺、主动联系弱连接、识别网络角色、以及建立定期低议程的真诚对话。

压力源于内心 - 作者:Yew Jin Lim - YJ 的思考

压力并非失败的标志,而是内心指南针需要更新的信号。创业打破了过去十八年大厂积累的预期模型,导致持续的不确定性和警觉状态。关键在于将压力视为信息而非评判,保持身份多元性,不将自我价值与短期结果挂钩。

  • 🧠 压力源于预期与现实不符:大脑是预测机器,创业初期缺乏可靠预期,导致持续的小警报累积成慢性压力
  • 🔄 比较陷阱:社交媒体展示的他人"高光集锦"让大脑不断感到落后,实际上是在与不存在的样本比较
  • 🆔 身份危机:放弃旧有职业头衔后,重新定义"我是谁"的过程会带来不适,这是正常的心理反应
  • 📊 将压力视为信息而非判决:当预期不符时,问"这教会我什么"而非"我哪里错了",把压力转化为学习信号
  • 🎭 保持身份多元:同时是儿子、父亲、跑者、冥想者,不让公司角色占据全部自我认同
  • 📈 不将自我价值绑定于数字:关心工作但不过度在意结果,学会优雅面对失败而不将其转化为自我否定
  • 🏃 身体优先于思维:当陷入思维漩涡时,通过跑步、拉伸、冥想等身体活动来打破循环,而非强行思考
  • 🔧 认知不等于行动:知道道理和做到是两回事,这是需要持续练习的过程,而非一次性解决方案
  • 🌱 接受学习过程:压力是探索未知领域的必然感受,正是选择离开舒适区所追求的状态

AI 原生组织的剖析 - Ajey Gore

AI 正在消除组织中的“翻译层”,即从“为什么”到“如何做”的中间转换环节。未来的团队将变得更小、更精干,重点转向战略判断(为什么)、产品定义(什么)和核心架构(如何做),而管理者的角色必须从单纯的协调转向实际贡献。

  • 🧠 AI 消除的是任务类型,而非职位:AI 主要压缩了“翻译”类任务(如需求转代码、工单转 PR),而非特定职位,这导致中间层工作大幅减少。
  • 📉 组织中间层正在崩溃:过去三十年的“为什么→什么→如何做”金字塔结构中,中间层(产品经理、工程经理等)主要负责翻译,现在这一层正在被 AI 取代。
  • 👨‍💼 管理者必须转向贡献:只负责协调翻译流程(如站会、状态更新)的管理者面临风险,幸存的管理者需直接参与“为什么”“什么”或核心系统设计。
  • 🛠️ 新团队形态:两端增厚,中间变薄:“为什么”层保持精干,“什么”层扩大(需更多判断力人才),“如何做”层缩小但更硬核(架构、信任系统、评估套件)。
  • 🎯 “亲自动手”被重新定义:不再仅指写代码,而是指深度参与工作(如设计提示词、评估套件、合约规范),远离纯粹的协调工作。
  • 💼 招聘策略需调整:减少招聘人数,停止寻找“翻译型”工程师,多招能定义“好”并操作 AI 的“什么”型人才,管理者需能实际贡献。
  • 🔧 工程师应避免与 AI 竞争翻译:转向 AI 无法完成的工作(定义正确性、构建框架、承担责任),向“什么”和“为什么”层移动,同时保留核心“如何做”技能。
  • 🏗️ 新组织图:代理 + 小团队 + 框架:代理负责大部分转换工作,人类聚焦战略、判断和系统设计,团队更小、更陌生、更有主见,且更贴近工作本身。