Web

64 篇内容

工程实践Cloudflare Blog

Next.js applications, powered by Vite: introducing Vinext 1.0

文章介绍 Cloudflare 发布 Vinext 1.0,一个让 Next.js 应用基于 Vite 构建、并可移植到 Cloudflare Workers、Netlify、AWS Lambda 等平台的框架。作者说明 1.0 在 App Router 与 Pages Router 兼容性(客户关注特性覆盖超 99%)、页面生命周期、缓存、可观测性和 next/* 生态兼容上做了增强,并用数千测试与每日运行 Next.js 端到端测试套件来防止回归。核心工程创新是“缓存热身”:把构建期预渲染从构建机迁移到 Cloudflare 网络,先把新 Worker 版本部署到 0% 流量、预请求页面填充缓存,再安全提升上线。维护方式上,用 AI Agent 每日跟踪 Next.js canary 变更、复现差异并提交修复。文章偏产品发布,缺少量化性能数据与失败边界分析,对 use cache 等新特性仅有限支持。

推荐收录:文中“0% 流量版本预渲染再提升”的缓存热身实现路径,以及用 AI Agent 持续同步上游 Next.js fork 的自动化维护模型,是可迁移到边缘部署、构建与缓存优化的工程实践,适合做 Web 框架、边缘运行时和发布流程的读者。主要风险是文章以产品发布为主,缺乏量化性能数据、失败案例与兼容性缺口的细节,引用时需注意其厂商视角。

工程实践Cloudflare Blog

How fast is the web? Explore billions of real-user measurements with BEACON

Cloudflare 发布 BEACON 公开数据集,基于 10,000 个大型网站的数十亿次真实用户性能测量,按 RUM Archive 标准每日更新到 Google BigQuery,覆盖主流浏览器引擎。文章介绍 Core Web Vitals 的 LCP、CLS、INP 直方图,支持任意分位数分析,并给出 LCP 与 INP 的子阶段拆解。关键发现包括 WebKit 在部分国家落后于 Blink、软导航比硬导航快 2-3 倍但首屏更重、带宽与 LCP 相关,以及非洲的传输体积较小。还说明去标识化、站点规模归一化和聚合等隐私与方法边界,适合性能工程、数据分析和 Web 研究参考。

推荐收录,因为它提供可公开查询的 BEACON 数据集、BigQuery 示例查询,以及 Core Web Vitals 子阶段和软/硬导航等可迁移的性能分析框架。适合 Web 性能工程师、浏览器/标准研究人员和数据团队评估真实用户体验、长尾分位数与架构取舍。需注意其样本限定为 Cloudflare 前 10,000 个站点,归一化与聚合会影响结论外推。

工程实践Cloudflare Blog

EmDash 1.0: the stable CMS with a secure plugin registry

Cloudflare 发布基于 Astro 的开源 CMS EmDash 1.0,并上线去中心化插件注册表。其核心是插件安全模型:插件运行在 Dynamic Workers 或 workerd 沙箱中,默认不访问站点内容、媒体、用户、密钥、文件系统和网络,只按声明且经管理员批准的能力授权,类似移动应用权限。注册表基于 AT Protocol,发布者用 Atmosphere 身份签名并保存包与发布记录,EmDash 通过签名 Merkle Search Tree 验证记录、校验和与构建来源,目录仅负责发现和审核,不拥有插件身份。文中还以 Cloudflare Blog 迁移、百万级周访问和 5k RPS 峰值说明生产可用性,并介绍 EmDash Build alpha 与 Workers for Platforms 多租户方案。但文章源自厂商发布,缺少独立安全审计、失败案例和成本对比。

推荐收录,因为它给出了 CMS 插件沙箱、能力授权和去中心化注册表的可迁移系统设计,并用 Cloudflare Blog 迁移与 5k RPS 峰值作为真实约束佐证。适合 Web 平台、CMS、插件市场或安全架构工程师参考;但来源为厂商发布,缺少独立审计和失败边界,引用其安全与性能结论时需自行验证。

工程实践Cloudflare Blog

The road to the agentic browser: A Kitesurf update

本文是 Cloudflare 对 Kitesurf 的更新,Kitesurf 是运行在 Workers 上、面向 AI Agent 的浏览器。它新增 WebMCP 支持,允许网站把 searchFlights() 等工具直接暴露给 Agent,并扩展 CSSOM、自定义元素、JSON 模块等标准,WPT 通过子测试增至 73 万以上。为降低 agentic loop 延迟,团队优化 Boa 与 Wasm DOM 边界、定时器、脚本加载和字体获取,使标准增加后时间与 CPU 仍大致持平;同时补齐 Browser Run API,支持 CDP、Playwright、Puppeteer 和 MCP,并把 PageRenderer 解耦到客户端用终端渲染。文章偏产品更新,开源和部分基准仍待发布,但适合关注 Agent 基础设施与浏览器自动化的读者。

推荐收录:文章虽为 Cloudflare 产品更新,但给出了 WebMCP 接入、73 万 WPT 子测试、Boa/Wasm DOM 边界优化以及 PageRenderer 解耦等具体工程证据。对构建 Agent 基础设施、浏览器自动化或边缘运行时的读者,可迁移的是其延迟优化思路、标准覆盖验证和渲染与页面执行分离的架构取舍。主要风险是部分性能数据与开源状态尚未完全公开,需结合外部基准持续跟踪。

工具笔记Bram.us

Show keystrokes on a website with the <​show-keystrokes> custom element

文章介绍了一个名为 <show-keystrokes> 的 Web 自定义元素,用于在屏幕录制或现场演示时可视化键盘按键。作者因 macOS 应用被企业安全策略屏蔽且无法在窗口/标签页共享中显示,遂借助 Gemini 构建了该 Web 原生方案。组件可通过 script 标签直接嵌入,也能以书签或 Chrome 扩展注入任意网页。其核心依赖 Popover API 将内容提升至 Top Layer 避免被遮挡,并利用 CSS Anchor Positioning 实现视口固定、跟随鼠标或文档流内定位,同时自动适配平台显示 ⌘/CTRL 等符号。组件支持快捷键、导航键或全部按键的显示模式,并可通过 ::part 和自定义属性定制样式。主要边界是现代浏览器对 Popover 和 Anchor Positioning 的支持,以及该工具主要面向演示场景,Chrome 扩展尚在审核中。

推荐收录,因为文章不仅介绍了一个实用工具,还具体演示了如何用 Popover API 和 CSS Anchor Positioning 解决覆盖层定位与层级问题,并提供了书签和扩展两种注入方式。对于前端开发者、DevRel 或技术讲师,可迁移的是现代 Web API 在免 z-index 覆盖层定位上的实践模式,以及将工具快速分发到任意页面的思路。风险在于依赖较新的浏览器特性,适用范围以演示场景为主。

技术文章Bram.us

New in Chrome 154: iframes that automatically resize themselves to their content

文章介绍 Chrome 154 新增的响应式 iframe 能力:嵌入方可在 iframe 上设置 frame-sizing 为 auto、content-height 或 content-width,被嵌入文档则需通过 meta 标签 responsive-embedded-sizing 声明允许与父页面通信。尺寸在页面加载后由子文档上报,并可通过 window.requestResize() 主动请求调整,allow-origins 用于限制可通信来源。文中给出 CSS 与 meta 代码示例,并用分步表单演示 iframe 随内容自动伸缩、无滚动条的效果。浏览器支持方面仅 Chromium/Chrome 154 已支持,Firefox 与 Safari 均未支持且尚无跟踪 bug。适合作为该新特性的快速参考,但未深入讨论安全、可访问性与跨浏览器降级方案。

推荐收录:文章虽短,但给出了 frame-sizing、responsive-embedded-sizing、requestResize 与 allow-origins 的具体用法和浏览器支持矩阵,能直接帮助前端开发者评估第三方嵌入组件的自适应方案。适合需要嵌入评论、社交内容或表单的 Web 开发者快速判断兼容性与落地边界;主要风险是该特性仅 Chrome 154 支持、尚无其他浏览器计划,且文章未展开安全与降级细节。

工程实践Cloudflare Blog

We just shipped support for the ugliest part of HTTP: Vary

文章介绍 Cloudflare 在 Cache Rules 中支持 HTTP Vary 的工程方案。Vary 让源站声明可能影响响应的请求头,但缓存无法判断差异是否真的影响响应,高基数、格式差异和 q 值会产生大量等价却无法复用的变体,降低缓存命中率。Cloudflare 把决策拆成两步:源站声明 Vary 字段,Cache Rule 决定每个字段用 normalize、passthrough 还是 bypass。normalize 对 Accept、Accept-Language、Accept-Encoding 做小写并按 q 值排序收敛到配置集合,passthrough 保留精确差异,bypass 绕过缓存,Vary:* 始终绕过。文章还说明缓存查找、变体存储和清除边界,并指出源站必须一致返回 Vary,方案仍需手工配置语言与格式。

推荐收录:文章并非单纯产品发布稿,而是围绕 HTTP Vary 的缓存语义、基数爆炸和变体归一化展开技术权衡,并给出 normalize、passthrough、bypass 的边界与 API 示例。对 CDN、缓存策略和 Web 性能工程师而言,其“源站声明差异、缓存判断差异是否重要”的设计思路和变体键管理方法可迁移到自建缓存或边缘场景;风险是带有 Cloudflare 产品语境,细节需结合文档验证。

工程实践Cloudflare Blog

Python Workers are now generally available

Cloudflare 宣布 Python Workers 正式 GA,使 Python 成为 Workers 一等运行时,并原生支持 Workers AI、R2、D1、Queues 等绑定。文章解释其基于 WebAssembly 与 Pyodide,通过 workers.asgi/wsgi 连接器桥接 ASGI/WSGI,让 FastAPI、Django 等框架无需服务器即可运行。为解决 WASM 沙箱缺少 TCP socket,团队用 Workers connect API 实现 socket 系统调用桥,以支持 Hyperdrive 连接 PostgreSQL/MySQL,并使 openai、langchain 等库可用。团队还推动 PEP 783 与 cibuildwheel 标准化包生态;文章适合平台/运行时工程师,但属厂商 GA 公告,缺少独立性能基准和长期边界分析。

推荐收录。文章虽为 GA 公告,但给出了可验证的工程实现证据:用 Pyodide/WebAssembly 承载 Python、实现 ASGI/WSGI 桥、用 Workers connect API 补齐 socket 系统调用,并推动 PEP 783/cibuildwheel 标准化包构建。对边缘运行时、Serverless 平台和 Python Web/AI 应用开发者有迁移价值;需注意其厂商视角,缺少独立性能对比和长期兼容性边界。

工具笔记Bram.us

Ship cleaner packages (without the ./dist or ./src folder) by publishing a subfolder to NPM

文章讨论 npm 发布包时 dist/ 或 src/ 目录名泄漏到 CDN 导入路径、污染公开 API 的问题。作者提出用 npm publish ./dist 将 dist 子目录当作包根目录,使构建产物直接位于发布包顶层,得到不带 dist/ 前缀的干净导入路径。为落地该方案,需在构建后把 package.json、README.md、LICENSE 等复制到 dist,并重写 package.json 中 main/module/exports 路径,同时可删除内部 scripts。文中给出零依赖 postbuild 脚本,并用 prepublishOnly 配合 PUBLISH 环境变量阻止误运行 npm publish,要求改用 npm run pub。还介绍 dry-run 与 npm pack 检查 tarball 的验证方式;局限是 NPM 尚未原生支持 publishDirectory,方案需额外维护构建后处理。

推荐收录。文章不仅介绍 npm publish ./dist,还给出 postbuild 复制与重写 package.json 的完整脚本、prepublishOnly 防误发布和 dry-run/npm pack 验证流程,属于可直接复用的发布工程经验。适合维护 npm 包、前端库或 CDN 分发的开发者;风险是该方案依赖手动后处理,且 NPM 尚无原生 publishDirectory 支持。

技术文章DuckDB Engineering Blog

Persistent Databases in the Browser with DuckDB-Wasm and OPFS

文章介绍 DuckDB-Wasm 如何借助浏览器 Origin Private File System(OPFS)实现持久化数据库:通过 open({path: 'opfs://analytics.duckdb'}) 打开数据库文件,数据以标准 .duckdb 文件加 WAL 的形式落盘,可跨页面刷新和浏览器重启存活,无需 IndexedDB 封装或应用层序列化。文中给出完整代码示例,说明远程 Parquet 数据只在首次加载时通过 HTTP range 请求获取,之后由 OPFS 提供;并对比了 auto 与手动 registerOPFSFileName 两种文件处理模式在便利性和句柄开销上的取舍。持久性部分指出浏览器标签页很少被干净关闭,因此应在每批写入后显式执行 CHECKPOINT,或将 checkpoint_threshold 设为 0,否则 WAL 重放会拖慢下次打开。文章还提醒 OPFS 属于可能被浏览器回收的存储,应定位为本地缓存而非唯一数据副本,并演示了通过 OPFS API 或 COPY 到 Parquet 导出数据;同时给出仅支持单句柄、SQL 重命名受限、npm latest 版本存在路径规范化 bug 等边界。

推荐收录:这是 DuckDB 官方对浏览器内持久化数据库的机制级说明,包含可运行代码、WAL 与 checkpoint 的持久性权衡、文件句柄与版本兼容等真实约束,证据具体而非概念宣传。适合做 local-first Web 应用、浏览器端分析或 Wasm 存储选型的开发者,其中的检查点策略、缓存与真实数据源分层、导出路径等判断可直接迁移到类似离线优先系统。主要风险是 API 与版本行为仍在演进,读者需核对所固定版本与官方限制说明。

工程实践Oxide Public RFDs

RFD 0223: Web Console Architecture

本文是 Oxide 的 RFD 223,讨论 Web Console 的客户端-服务端架构,并将其从 RFD 169 的认证议题中拆出。核心决定是:为避免在机架内引入 Node.js 和 npm 生态风险,Console 先做成由 Nexus 托管的静态 JS bundle,直接在浏览器调用 Nexus,并由 Nexus 接受会话 Cookie。文章对比浏览器单端、带/不带数据库连接的 Console 服务以及独立数据库方案,并分析 DDoS 缓解与 Node 依赖树风险。作者还评估 Deno、V8 Rust 绑定等服务端 JS 路径,以及共享校验、加载 spinner、SSR、Server Components、Remix 的收益与复杂度。结论是当前采用浏览器单端,后续加服务端集成不会丢弃代码;是否重启该决定取决于 UX 收益能否显著超过风险。

推荐收录:这是一份完整的架构决策记录,直接给出浏览器单端方案、会话 Cookie 认证、Node/npm 风险、DDoS 缓解和多种备选架构的取舍证据,而非泛泛介绍。适合前端架构、平台工程、控制面/基础设施开发者阅读,可迁移到 BFF 取舍、控制台认证、依赖治理和渐进式 SSR 决策。主要限制是结论高度依赖 Oxide 的 Rust 栈与安全约束,其他团队需重新评估。

技术文章Bram.us

Introducing <​rich-input>, a GitHub-like search/filter text input to embed on your site

文章介绍作者为唱片收藏项目开发的独立 Web Component <rich-input>,用于在网页中嵌入类似 GitHub 的关键字过滤搜索框。它支持自由文本与 key:value 结构化查询,自动补全关键字和值,并通过嵌套 <datalist> 声明式配置;还支持图片选项、无效值波浪线下划线和原生表单提交。实现核心依赖 Chrome 152+ 的 OpaqueRange API,在原生 input 内创建范围以定位弹层并用 CSS Custom Highlight API 实现内联高亮。不支持时组件回退到 contenteditable,兼容 Chromium 105+、Safari 17.2+ 和 Firefox 140+。作者还披露使用 Google Antigravity 进行 AI 辅助开发,但未展开性能、可访问性、包体积及长期维护等边界问题。

推荐收录:文章并非单纯发布公告,而是给出 OpaqueRange、Custom Highlight、formAssociated 与跨浏览器 fallback 的具体实现路径,并附代码与源码链接。对需要构建富搜索输入框的前端/Web Component 开发者有直接参考价值,尤其是原生输入框内范围定位、高亮和降级方案。主要风险是 OpaqueRange 仍属实验性 API,组件为 AI 辅助生成,生产可用性、可访问性和维护成本需读者自行验证。

工具笔记Simon Willison

Generating running routes with GPT-6 Astra and ChatGPT Work

文章记录作者用 ChatGPT Work 与 GPT-6 Astra 生成住所周边 5K/10K 跑步环线的过程:模型运行约 27 分钟,先用 Nominatim 定位地址,再用 Overpass 下载 OpenStreetMap 道路与步道数据,在本地计算环线,最终输出可视化、GPX 和 GeoJSON。地图由 visualize skill 生成内嵌 HTML,用 D3 从允许列表 CDN 加载渲染,并受 CSP 限制。作者的核心批评是 ChatGPT UI 不展示实际执行代码和细节,线程压缩后更无法取回 Python 代码;他建议 LLM 系统在使用压缩时保留压缩前文本,并通过 agent 工具调用暴露给用户。该案例依赖特定模型和产品,代码不可复现,但透明度与上下文压缩问题具有普遍性。

推荐收录:文章用一个可操作案例展示了 LLM agent 调用 OSM 数据生成路线并交付可视化/GPX 的完整工作流,同时指出上下文压缩导致执行细节不可追溯这一工程痛点,并给出保留压缩前文本、通过工具调用暴露的具体改进方向。适合 AI 工程、Agent 平台和开发者工具方向读者参考;局限是缺少可运行代码,细节依赖特定产品,迁移时需自行验证。

技术文章Bram.us

WebKit supports interactive-widget … and hopefully Safari will too?

文章介绍 WebKit 实现了 viewport meta 标签中的 interactive-widget 指令,并梳理其来龙去脉。背景是 Interop 2022 的视口调查工作:Chrome 108 把虚拟键盘弹出时的默认行为改为只缩放 visual viewport,与 Safari 对齐,但副作用是 position: fixed 内容会被键盘遮挡。为此引入 interactive-widget,提供 resizes-visual、resizes-content、overlays-content 三个取值,分别控制是否缩放 layout/visual viewport 或整体不缩放。作者本地编译 WebKit 并在 iPhone 模拟器的 MobileMiniBrowser 中验证三个取值均生效,Safari 正式版与 Technology Preview 尚未发布该特性,浮动地址栏等 Safari 特有 UI 的影响仍待实测;目前 Chrome 108 与 Firefox 133 的 Android 版已支持。

推荐收录:文章虽短,但由参与制定该指令的作者清楚解释了 interactive-widget 的三个取值语义、Chrome 108 改变默认行为的动机与副作用,以及各浏览器支持现状,属于一手技术资料。适合处理移动端虚拟键盘遮挡固定定位、需要控制视口缩放的前端开发者参考。主要风险是 Safari 尚未正式发布,实际行为可能变化。

技术文章Bram.us

Animating CSS Grid Layouts with CSS Anchor Positioning

文章介绍了一种无需 JavaScript 即可让 CSS Grid 布局在视口尺寸变化时平滑重排的技术方案。核心思路是借助 CSS Anchor Positioning,在每个网格单元内部注入一个作为锚点的额外 wrapper,并通过 anchor-scope 将锚点名称限定在单元格子树内,避免全局冲突。随后利用 CSS transition 对 inset 属性的过渡,使内容块在网格重排时产生连续动画。文章给出了四个关键细节:使用 aspect-ratio 保持单元格宽高一致、为内容设置固定尺寸以避免插值变形、anchor-scope 的作用域管理,以及 transition 的过渡设置。作者还说明了该方案与 View Transitions 的区别——动画可随时中断且无需脚本,并提供了可运行的 CodePen 示例。该方案适用于响应式网格布局的动态重排场景,但依赖浏览器对 CSS Anchor Positioning 的支持。

推荐收录,因为它展示了 CSS Anchor Positioning 的一个真实且可迁移的应用场景,并给出了完整实现细节、代码示例和关键坑点。对关注前端布局动画、希望减少 JavaScript 依赖的开发者有直接参考价值,可作为技术实践的案例。

工程实践Fzakaria Blog

Any Nix package, live in your browser

文章介绍了一个名为 trynix 的浏览器内 Nix 包运行器,允许用户通过静态网页直接启动一个完整 Linux 虚拟机,并运行 nixpkgs 历史上任意版本的任意包。作者结合此前构建的 nixpkgs-multiverse、grail 和 omniflake 等工具,实现了“属性+版本号→store path”的映射;利用 cache.nixos.org 等公开缓存提供的 CORS 支持,使浏览器可以直接获取 NAR 包;再借助 QEMU 与 WebAssembly 在浏览器中启动真实的 x86_64 Linux 内核,并通过 9p 文件系统挂载内存中的 Nix store。文章还讨论了性能优化,如后台预取引擎和虚拟机快照恢复,使得首次启动约 4 秒、二次访问约 1.5 秒。作者分析了该方案的边界:二进制仍处于模拟执行、首次运行有翻译开销、闭包大小受制于标签页内存和 WebAssembly 的 32 位地址空间。最后作者展望了 PR 评测试用、Agent 产物共享、可复现 bug 报告、可运行文档和软件考古等应用场景。整体是一个完整的工程实践案例,展现了将多种既有技术组合成新系统的思路。

推荐收录。文章展现了真实工程系统的完整构建过程,从组件设计、缓存复用、性能优化到边界约束均有具体细节。对关注 Nix、WebAssembly、浏览器端执行或可复现构建的读者,文中的架构拆解和应用场景推演极具迁移价值,也有助于启发新的工具链设计。

技术文章知乎 - NGINX洪志道

一个应用服务器是怎么工作的

文章系统拆解应用服务器的工作原理,衔接外层 Web 服务器与语言运行时,分析其如何接收请求、管理进程并调用应用代码。作者将应用服务器分为两类:一类直接用应用语言实现 HTTP 服务并运行同生态代码,另一类用 C/C++/Rust 等系统语言实现服务器核心,通过语言适配器加载解释型语言引擎。文章以 PHP-FPM、Gunicorn、Uvicorn、NGINX Unit 等为例,解释 SAPI 与 Zend Engine、WSGI/ASGI 等接口差异,并阐述固定进程池、动态进程池和按需进程池的取舍。随后文章跟随一次请求从 accept 到语言运行时调用再到返回响应的完整链路,说明请求解析、应用选择、进程获取、适配器转换及错误分层。最后讨论应用服务器应负责多少功能的分层设计,强调统计应放在应用执行与响应返回的边界。文章基于通用部署模型,忽略具体协议细节,适合作为理解应用服务器基础架构的参照。

推荐收录。文章由 NGINX 背景作者写作,澄清了 Web 服务器、应用服务器、语言运行时时常被混淆的分层关系,并用一次请求的完整路径串联进程管理与语言适配等细节。适合初入后端的开发者建立系统认知,也适合需要设计或选择应用服务器形态的工程师作为思考框架;文中对多语言支持难点的分析具有普遍参考价值。

技术文章Bram.us

Feature Detecting “Undetectable” CSS Features with @supports named-feature()

文章由Bramus撰写,详细介绍了CSS新增的@supports named-feature()函数,用于检测传统@supports无法区分的底层行为变化。作者以2020年“Flexbox Gap”难以检测为起点,解释了为何需要此类机制,并梳理了CSSWG从2019年issue到2023年重新讨论再到David Baron提案的过程。文章指出named-feature()通过预定义关键字暴露特定能力,目前规范已定义两个关键字:anchor-position-follows-transforms用于检测锚点定位是否支持transform追踪,single-axis-scroll-container用于检测单轴滚动容器。文章还给出了浏览器支持现状,并说明gap:flex、align-content:block等旧特性为何不加入关键字,以及style queries的检测难点。内容结合真实提案与工程痛点,对CSS特性检测的边界和设计权衡有清晰阐述。

推荐收录,因为文章由参与CSSWG讨论的作者撰写,第一手呈现了named-feature()的设计动机、关键词提案过程和浏览器落地情况,对前端开发者理解特性检测边界、处理渐进增强有直接价值。适合需要可靠特性检测的前端工程师或CSS规范研究者,其展示的“解析支持≠组合生效”问题与解决方案可迁移到其他平台特性检测场景。

技术文章Jake Archibald

Controlling when CSS custom properties are computed

文章深入探讨了 CSS 自定义属性的计算时机,指出未注册的自定义属性默认按 token stream 保存,var() 替换后才会在消费处计算;而通过 @property 注册并指定 syntax 后,自定义属性会在声明处提前计算,导致结果取决于上下文。作者用 sibling-index() 函数和 getComputedStyle() 验证了两种行为的差异,并说明该影响也涉及相对字体单位、容器查询单位以及 URL 解析基准。文章还通过嵌套 var() 的例子展示了任意替换函数的立即替换特性与 syntax 的交互,揭示了 --multiplier 在子元素上的覆盖被忽略的行为。内容以实例为主,边界清晰,对于理解 CSS 变量计算模型很有帮助。

文章用具体可复现的示例清晰解释了 CSS 自定义属性计算时机的微妙规则,是浏览器实现细节和规范行为的解读,具有长期参考价值。适合前端开发者、CSS 库作者和浏览器兼容性研究者阅读,能帮助理解 @property 注册对计算语义的影响并规避相关陷阱。

工程实践知乎 - NGINX洪志道

聊聊 NGINX 作者 Igor Sysoev 的遗珠之作:Unit

文章是 Unit 核心维护者对 NGINX Unit 的一手回顾。它指出 Unit 的定位是在 NGINX 之后再向前一步,用统一基础设施直接加载并管理 PHP、Python、Go 等应用进程,把配置变成可通过 REST API 修改的运行时对象树。文章解析了 router 多线程事件循环、任务队列、基于 port 的进程间通信,以及应用进程自动扩缩中对 pending、空闲、就绪和崩溃的生命周期处理。作者结合与 Igor 共事的经历,强调架构控制复杂性的能力,并指出 Unit 因市场定位与生态未闭环而在 2025 年归档。

推荐收录。文章由 Unit 核心维护者撰写,包含真实系统设计细节和一手维护经验,对 router 并发模型、动态配置与进程生命周期有扎实剖析。适合 Web 基础设施、应用服务器和系统设计方向的工程师阅读,可迁移的是对复杂状态和并发边界的工程判断。需要注意项目已停止维护,读者应结合当前生态评估其模式适用性。

工程实践Simon Willison

A shot-scraper-style JSON API on Bun 1.4's new Bun.WebView

本文介绍了 Bun 1.4 发布的新特性,重点剖析了 Bun.WebView——它将浏览器自动化能力内置到 Bun 运行时,支持通过 macOS WebKit 或 CDP 控制 Chromium。作者参照自己的 shot-scraper javascript 工具,用 Claude Code 辅助构建了一个 TypeScript JSON API 原型,用于加载网页并执行 JavaScript。实验通过 cgroups 限制容器内存,评估该服务在复杂网页上运行完整 Chrome 所需的内存上限,结果显示约需 192MB-256MB。文章还提到了 Bun 1.4 的其他变化,如 Rust 重写、性能和兼容性提升。该实验针对单实例服务,内存需求会随页面复杂度和并发数变化,适用于基于 Bun.WebView 的轻量级浏览器自动化工具设计。

推荐收录。文章来自长期关注 Web 开发的 Simon Willison,对 Bun 1.4 的新 API 做了实际验证,给出了明确的内存占用数据,属于可复制的技术测量。适合想用 Bun.WebView 构建浏览器自动化服务的开发者,尤其是做内存预算和容器规划的读者。其测量方法和 API 使用方式可迁移到类似场景,但需注意测试范围较窄,生产环境需进一步验证。

技术文章Bram.us

The Case for Tri-State Dark Mode Toggles

文章围绕网站暗黑模式切换控件展开,明确主张应使用三态(系统、浅色、深色)而非二态开关。作者与Lea Verou在CSS工作组的讨论中产生分歧,并通过社交媒体调查获得43票支持三态、7票支持二态的数据,同时针对二态控件在操作系统自动切换时产生的意外结果进行了场景分析。文章还提出了二态控件的可行设计,例如明确标注系统状态或向存储写入显式值,并用Vale的双控件示例展示三态的实现技巧。最后强调界面设计应优先清晰度和可预测性,以用户心智模型为核心。

文章聚焦暗黑模式切换这一前端常见交互,提供了具体场景下的缺陷分析和多种互有取舍的解决路径,并引用了真实辩论和用户反馈作为依据。适合前端开发者、UI工程师在设计主题切换时参考,其对状态可预测性和用户意图表达的分析也可迁移到其他偏好设置控件。

工具笔记Simon Willison

Markdown SVG upgrades

文章介绍了一款 Markdown 渲染工具 markdown-svg-renderer 的新功能。该工具允许用户粘贴 Markdown 或通过 URL 加载 Gist,在浏览器中将 SVG 文档渲染成预览,并提供切换至 PNG、JPEG 和 MP4 的标签页。新增加的 MP4 功能会检测 SVG 动画时长、逐帧渲染,并通过 ffmpeg.wasm 在浏览器内将动画导出为视频,以便在不支持 SVG 动画的社交平台分享。文章还给出了具体的 Gist 示例和工具地址,说明了工具的使用场景和易用性。虽然文章没有深入讲解实现源码,但展示了如何用 WebAssembly 将桌面级功能(FFmpeg)搬到浏览器中的思路。

推荐收录。本文虽是一篇个人工具更新日志,但核心亮点在于将 ffmpeg.wasm 集成到浏览器中,实现动画 SVG 转 MP4 的完整流程,这对需要处理 SVG 兼容性的前端开发者、内容创作者和工具作者都有直接参考价值。读者可以从中获得一个轻量、可迁移的解决方案思路;不足之处是技术细节较少,深入实现需参考工具源码。

技术文章Bram.us

Unlock Immediate Diagonal Scrolling with CSS scroll-axis-lock: none

本文介绍 CSS 新属性 `scroll-axis-lock`,用于控制浏览器默认的滚动轴锁定(railing)行为。当用户在二维滚动容器中的手势沿单一轴向有明显优势时,浏览器会锁定该轴,忽略垂直方向的微小偏移,这有时会阻碍用户立即进行对角线滚动。`scroll-axis-lock: none` 可以禁用此锁定,使滚动完全跟随用户输入。文章通过视频对比了 Chrome 与 Safari 的差异,并提供了交互演示和代码示例。当前仅 Chromium 153 支持,Firefox 和 Safari 尚未支持,作者建议将其作为渐进增强使用。该属性适用于需要精确对角线滚动的场景,但可能引入直线滚动时的抖动,开发者需根据平台差异权衡。

本文以清晰的解释和对比演示,揭示了浏览器滚动轴锁定的底层行为及其对用户体验的影响,并提供了直接的控制手段。适合前端开发者、交互设计师理解并解决二维滚动交互中的“卡顿”问题。文中展示的渐进增强实践和平台差异分析,可迁移至其他新 CSS 特性的评估与应用,具有显著的参考价值。

工程实践Cloudflare Blog

Introducing Kitesurf: The agent-first browser that runs in V8 isolates on Cloudflare Workers

Cloudflare推出Kitesurf,专为AI代理设计的轻量浏览器,运行于Cloudflare Workers的V8隔离环境中。文章阐述了为何需要新浏览器:传统Chromium对代理而言资源开销大,而代理更关注令牌数、上下文窗口和成本。团队采用Rust编译为WebAssembly、借助Web Platform Tests驱动开发、强调组件隔离与无状态设计。整体架构分为Engine处理CDP/HTTP、PageScript利用动态Worker解析HTML/CSS/JS、PageRenderer光栅化生成截图。性能上比Chromium节省3-7倍内存和CPU,但渲染速度慢1.7倍。当前兼容性有限,不支持视频和WebGL,适合一次性截图、PDF生成等简单任务。项目仅12周,开源在即。

推荐收录,因为文章并非产品发布,而是深入的技术工程案例,详尽阐述了为AI代理构建轻量浏览器的设计决策、架构实现和性能权衡。适合从事浏览器、AI代理或边缘计算基础设施的工程师阅读,其中的隔离、无状态设计与WPT测试驱动开发方法可迁移到类似复杂系统的构建中。但需注意项目尚处早期,兼容性有限。

技术文章Cloudflare Blog

Building an open Agentic Internet: readable, discoverable, callable, and payable

文章提出“代理互联网”愿景,将AI代理视为网站的新型访问者,围绕可读、可发现、可调用、可支付四个特性构建开放基础设施。作者分析了传统网络对代理的不适应性,如重复抓取、广告模型失效,并阐述了Cloudflare提供的技术组件:Markdown for Agents和Kitesurf浏览器实现高效读取,AI搜索和AEO优化发现,WebMCP和Code Mode支持直接调用页面功能,x402协议和钱包机制处理支付。文章强调身份认证(Web Bot Auth、PACT)和开放标准的重要性,旨在让域名所有者自主选择对代理的接纳与付费规则,避免互联网封闭。内容偏重架构设计理念,未涉及具体实现细节,但为开发者和架构师理解代理时代的网络基础设施提供了方向性参考。

该文章勾勒了AI代理与互联网融合的底层架构蓝图,提出的“可读、可发现、可调用、可支付”框架切中当前代理生态的关键需求,对构建开放、互操作的Web服务具有长远参考意义。适合关注Web基础设施、AI工程化和分布式系统的开发者与架构师了解前沿趋势和设计模式,虽然缺乏代码级细节,但其概念模型可迁移至实际系统设计中。

工程实践Simon Willison

One-shotting a Raccoon Heist game using Claude Fable 5

Simon Willison 使用 Claude Fable 5,仅凭一条旧推文和两张概念图,全程在手机上完成了一个 3D 浣熊盗窃浏览器游戏。文章详细记录了从 GitHub Pages 部署、提示词设计到 AI 自主生成纹理、构建场景、添加巡逻犬等机制的全过程。Claude 不仅使用 Three.js 和 Playwright 进行自动化测试,还通过 OpenAI 图像 API 生成静态资源,并完成了多屏适配。作者最终评估了游戏可玩性,指出 AI 擅实现但不懂“好玩”,并将其视为探索 AI 代理能力的低风险实验。该案例为 AI 辅助开发的工程流程、局限性和迭代方式提供了具体参照。

文章以完整的工程案例展示了 AI 编程代理从零构建软件的过程,包含提示词、代码片段、测试方法和最终评判,信息密度高且证据链完整。适合关注 AI 辅助开发、快速原型或工具集成的从业者阅读,文中的工作流程、自动化测试方式及对 AI 设计能力局限的坦诚分析具有可迁移的参考价值。

技术文章Bram.us

Styling the Navigation: Declarative Route and Navigation Matching in CSS

本文介绍了Chrome团队提出的CSS声明式路由与导航匹配新规范,旨在解决多页应用(MPA)中使用View Transitions时难以根据来源和目的地页面对导航动画进行声明式样式控制的痛点。作者详细阐述了@route、@navigation、:nav-source和:link-to()等关键语法:@route定义命名路由模式,@navigation查询当前导航的起止端点,:nav-source定位发起导航的元素,:link-to()则允许基于链接目标路由应用样式。文中的一个滑动导航Demo演示了该方案无需JavaScript即可动态切换视图过渡类型,显著简化了导航动画逻辑。该规范目前处于早期提案阶段,即将提交CSS工作组F2F会议讨论,参数匹配等细节仍在设计中,实验性支持已可在Chrome Canary中启用。

推荐收录,因为文章深入解释了正在演进中的CSS导航匹配规范,详细提供了设计动机、语法定义和实际用例,对关注View Transitions和声明式CSS能力的前端开发者具有直接参考价值。它为简化导航动画、减少JavaScript干预指出了一条标准化路径,读者可以提前了解并影响规范走向,但其API尚未最终确定,请留意未来变化。

技术文章Jake Archibald

Fixing my tooltip accessibility mistake

文章记录了一次工具提示(tooltip)无障碍(accessibility)实现错误及修复过程。作者在制作基于popover='hint'的图标按钮提示时,初始使用aria-describedby将按钮与提示相关联,但因提示文字重叠导致屏幕阅读器重复朗读,便错误地移除了按钮的aria-label,使按钮失去可访问名称。在专家反馈后,作者将aria-describedby改为aria-labelledby,直接从提示元素获取可访问名称,解决了朗读重复和语义缺失问题。文中还讨论了分割标签与描述的备选方案,并强调需用多个屏幕阅读器测试以避免单一工具遗漏问题。本文适合需要为SVG图标按钮提供无障碍说明的前端开发者,明确区分了两个ARIA属性的适用场景与边界。

本文通过作者亲身踩坑案例,清晰对比了aria-describedby与aria-labelledby的无障碍语义差异,直接展示了从错误到修复的完整过程与测试依据,对前端开发者编写可访问的图标按钮、工具提示具有直接可迁移的指导价值。尤其适合关注Web无障碍实践与屏幕阅读器兼容性的开发者参考。

个人心得Julia Evans

Some more things about Django I've been enjoying

作者记录了自己尝试使用 Django 构建 2010 年代风格网站(后端渲染 HTML、最小化 JavaScript、SQL 数据库)的学习过程和个人体验。她重点分享了几项让她感到愉快的 Django 特性:可组合的查询集(QuerySet)方法让查询条件封装和复用变得可读且模块化;内置模板过滤器(如 urlize、linebreaksbr、date、querystring)极大简化了 HTML 生成和链接拼接;自动数据库迁移系统使模型变更和演进成本极低。在代码组织上,她放弃了基于类继承的视图,转而采用函数式视图,感觉更直观。她还提到对 Django 性能的困惑,如模板缓存被误关闭、不确定性能预期与优化方向。全文是从业者视角的具体经验分享,而非系统教程。

这是一篇真实的开发者实践反思,聚焦于 Django 框架中提升效率和可读性的具体特性(查询集封装、模板过滤器、自动迁移)以及个人在代码组织和性能调校上的取舍。对正在学习或评估后端渲染栈、尤其是小型到中型 Web 应用的开发者来说,文中列举的便利点与踩坑经历具有直接的可迁移参考价值。

工程实践Julia Evans

Learning a few things about running SQLite

Julia Evans 分享了她近期在 Django 网站中使用 SQLite 时积累的几个运维经验。她首先发现对 4000 行的表使用 FTS5 全文搜索耗时 5 秒,运行 ANALYZE 后降至毫秒级,推测是查询计划不佳所致。清理大量行时,删除操作超过 5 秒会导致其他工作线程写入超时崩溃,她通过小批量处理来规避。备份方面,最初使用 sqlite3 VACUUM INTO 加上 restic 上传到 S3,但偶尔 OOM 并产生锁问题;近期改用 Litestream 进行增量备份。她还提到拆分多个数据库文件有助于管理。文章基于个人小型项目,作者坦言若需要多写入支持可能得迁移到 PostgreSQL。

本文来自真实工程实践,详细记录了 ANALYZE 优化查询、批量清理避免写入冲突以及两种备份方案的具体步骤,对使用 SQLite 搭建个人或小型 Web 应用的开发者有直接参考价值。虽然深度有限,但作者的反思和解决方案具有可迁移性,适合作为入门级运维经验收录。

技术文章Simon Willison

Firefox in WebAssembly

文章介绍Puter团队将Firefox浏览器编译为WebAssembly,使整个浏览器能在其他浏览器中运行的技术项目。作者展示了自己的博客在WebAssembly版Firefox中加载的效果。项目选择Firefox/Gecko引擎因为其对单进程模式支持较好;利用Claude Opus和Fable等AI工具辅助编程,借助订阅计划大幅降低了实际成本。演示通过Wisp协议将所有网络流量经Puter服务器代理,以绕过浏览器内代码无法直接发起网络连接的限制,团队为此扩展了服务器容量。文章还验证了端到端加密对HTTPS站点有效,对HTTP站点则为明文,并提及了类似的WebKit编译项目但缺少在线演示。该项目展示了WebAssembly在运行复杂桌面应用方面的潜力和代理架构的约束。

该项目是WebAssembly技术在浏览器端运行大型C++应用的典型案例,对前端开发者、浏览器引擎研究者和关注AI辅助编程的工程师有直接参考价值。文章涵盖了引擎选型、网络代理、成本控制和加密验证等关键工程细节,展示了从设想到实现的完整技术路径。收录此案例有助于读者理解WebAssembly的能力边界和集成模式,并迁移到类似跨平台应用项目。

工程实践知乎 - NGINX洪志道

09 | AI太擅长写业务了

文章以 Nginx 上 Lua Web API 的开发为例,介绍了如何利用 AI 辅助编程实现 Request、Response 和 Headers 对象。核心方法是统一对象模型的设计模式:通过 create(创建骨架)、get(取出 C 结构体)和 fill(填充数据)三个独立职责,解耦对象定义、数据来源和跨语言访问,确保 Lua 与 C 两侧的一致性。作者强调 AI 更适合在清晰的设计约束下快速复制正确模式,而人负责确定模型和边界。文章还讨论了 AI 在加速理解系统和生成代码方面的价值,以及如何在迭代中提升代码质量。结论是“人设计,AI 实现”能平衡效率与质量,但需要较强的设计能力来引导,且 AI 初始输出需人工审校。适用场景包括跨语言系统开发、嵌入式脚本扩展等,不足在于对设计者能力要求较高。

推荐收录,因为文章不仅展示了 Nginx/Lua 跨语言对象管理的具体工程实现,还提炼出可复用的 create/get/fill 设计模式,并提供了人机协作的实践边界。对于需要开发嵌入式脚本接口、处理跨语言对象生命周期,或希望利用 AI 提升编码效率的工程师,文中模式可以直接迁移,协作理念也具有长期参考价值。

工程实践Red Blob Games

Responsive design calculator

作者发现个人网站因手动计算 px 到 rem 转换时四舍五入导致字体大小微小偏差,从而追溯了从固定宽度布局到响应式布局的演变过程。文章详细介绍了利用断点插值和斜率统一控制边距分配的方法,并开发了交互式计算器,基于断点自动生成 CSS 代码。作者进一步探索了在现代 CSS 中使用 min()、clamp() 和 round() 函数实现布局计算,最终形成一套可复用的公式。本文展示了从问题定位、手工计算修复到自动化工具构建的完整工程实践,适用于需要实现平滑响应式布局的前端场景,但对非常老旧的浏览器兼容性有限。

本文提供了一个从微小 bug 定位到工具化改进的典型工程案例,聚焦于响应式布局断点计算的真实约束与取舍。对于前端开发者和 UI 工程师,文中的斜率控制方法、交互式计算器以及现代 CSS 函数应用可直接迁移到类似项目中,具有明确的实践参考价值。

工具笔记Simon Willison

Have your agent record video demos of its work with shot-scraper video

本文介绍了 shot-scraper 1.10 新增的 `shot-scraper video` 命令:通过 `storyboard.yml` 定义一组浏览器动作,再借助 Playwright 录制这些步骤的演示视频。作者把它用于 Datasette 的新功能演示,证明这种方式比手工录屏更适合让编码代理自动产出可展示的成果。文章还说明了这套方案如何被 GPT-5.5 xhigh 在 Codex Desktop 中自动生成,包括 YAML 剧本、演示数据库和使用说明。实现过程中遇到的关键问题是 Playwright 早期视频会带调试边框、开头出现白帧,以及录制宽度受限;这些问题分别依赖后续改进和 1.61.0 版本修复才得以落地。作者进一步强调,用命令的 `--help` 输出就能让代理理解并调用工具,这种设计像把技能说明内嵌进 CLI,适合自动化演示、文档生成和代理式工程流程,但更依赖较新的 Playwright 生态。

收录价值明确:文章给出了可复用的“CLI + storyboard + Playwright 录屏”工作流,并展示了编码代理如何直接基于 `--help` 生成可运行的演示脚本。适合做开发工具、自动化文档和 agent 工程的参考,但读者需要注意它依赖较新的 Playwright 版本,且更偏演示录制而非通用测试。

工具笔记Simon Willison

Count the number of Safari tabs

这篇短文记录了一个极小但实用的 macOS 技巧:通过 AppleScript 在命令行里统计 Safari 当前打开的全部标签页数量。作者给出的命令是 `osascript -e 'tell application "Safari" to count tabs of every window'`,直接利用 Safari 的脚本接口遍历所有窗口并汇总标签数。文章没有展开 AppleScript 语法或 Safari Automation 的背景,但它清楚展示了一个可复制的自动化片段,适合需要快速盘点浏览器状态、做脚本集成或写小工具的人。其适用范围主要限于 Safari 和支持 AppleScript 的 macOS 环境,对其他浏览器或跨平台场景不直接适用。

有明确可执行命令作为直接证据,能立刻用于 Safari 自动化或状态检查,适合 macOS 开发者和效率工具使用者。局限也很清楚:依赖 Safari 与 AppleScript,迁移到其他浏览器时需要重写。

技术文章Jake Archibald

The Goldilocks customizable select height

文章围绕可定制 select 的下拉面板高度设计,提出一套“既不贴边、也不过小、还不过大”的 CSS 方案。作者先解释浏览器默认的 anchor positioning、max-block-size: stretch、position-try-fallbacks 等行为,再逐步用 viewport margin、最小/最大高度约束改善交互。核心难点在于不同浏览器对百分比高度、翻转边距和 intrinsic size 的支持不一致,因此文章引入 calc-size() 把 fit-content 和 stretch 这类内在尺寸纳入 min()/max() 计算。文中还给出 Firefox/Safari 的降级写法,以及在选项较少时避免“最小高度反而显得难看”的补丁。整体内容适合需要做现代表单控件、CSS 适配和跨浏览器布局调优的前端开发者参考,但其中部分最佳方案仍受浏览器支持度限制。

有明确的可复用代码和浏览器差异分析,不是泛泛介绍新特性,而是解决 select picker 高度控制的具体工程问题。适合前端开发者在做可定制表单控件、CSS 新特性落地和跨浏览器降级时直接借鉴。

工程实践知乎 - NGINX洪志道

05|NGINX 脚本化历史,以及为什么选择官方 Lua

文章梳理了 NGINX 脚本化能力的演进脉络:从早期 Perl、SSI,到作者参与的 njs、QuickJS,再到自己尝试的 nginx-lua-web,说明 NGINX 一直在扩展可嵌入脚本运行时。核心论点是,这个新项目不想让用户直接面对 NGINX 的 body filter 等内部概念,而是提供更接近纯 Web 运行时的编程体验。作者进一步比较了 OpenResty 常用的 LuaJIT 与官方 Lua,认为后者在当前版本中性能、GC、稳定性和工程可用性已经足够,且更适合做 C 程序的嵌入式胶水语言。为提升易用性,文章还借鉴了 JS Web APIs,强调用 fetch 等标准接口降低脚本门槛。整体更像一次结合 AI 编程实践的工程选型记录,但其中部分关于版本演进和生态判断带有作者经验视角,适合与实际需求一起审视。

文章直接给出了 NGINX 脚本化路线、官方 Lua 选型和 Web API 设计的工程理由,不是泛泛而谈。适合做嵌入式脚本运行时、Nginx/OpenResty 生态或 AI 辅助开发实践的读者参考;但其中对 LuaJIT/官方 Lua 的结论带有作者立场,具体迁移前仍需结合基准测试验证。

工具笔记Simon Willison

simonw/browser-compat-db

这篇文章记录了作者把 Mozilla 的 mdn/browser-compat-data 兼容性数据仓库转换成一个约 66MB 的 SQLite 数据库的实践。作者借助 Claude Code 和 sqlite-utils 生成转换脚本,再用 Codex Desktop 编写 GitHub Actions 工作流,在构建后把数据库强制推送到一个独立的 orphan 分支。这样做的目的不是做可写数据库,而是利用普通 GitHub 仓库文件可通过 CDN 访问且带开放 CORS 的特性,方便浏览器端直接下载和在 Datasette Lite 中在线探索。文章的核心价值在于展示了“结构化数据仓库 + SQLite + 静态托管 + 前端可直接查询”的发布链路。它更适合静态、可再生成的数据集分发场景,不适合高频写入或需要事务服务化的系统。

文章给出了可直接复用的证据:SQLite 生成脚本、GitHub Actions 自动构建、orphan 分支静态发布,以及利用 GitHub CDN 的开放 CORS 让浏览器端直接访问。对需要发布可下载数据集、做前端只读查询或搭建轻量数据浏览器的工程实践很有参考价值。

工程实践Simon Willison

Porting the Moebius 0.2B image inpainting model to run in the browser with Claude Code

这篇文章记录了作者把 Moebius 0.2B 图像修复模型从原本依赖 PyTorch 和 NVIDIA CUDA 的实现,迁移为可在浏览器中通过 WebGPU 运行的版本,并最终部署到 Hugging Face 和 GitHub Pages 的全过程。文章不仅描述了模型转换为 ONNX、前端加载与执行、以及 1.3GB 权重缓存等关键工程问题,还展示了如何用 Claude Code 以“边做边问”的方式推进一个跨端 AI 应用原型。结论是:在当前浏览器与 WebGPU 能力下,客户端本地运行这类小型模型已经可行,但实际可用性会明显受制于首次下载体积、缓存策略和用户环境兼容性。

推荐收录,因为它提供了一个非常具体、可复用的端到端迁移案例:从模型可行性研究、ONNX 转换、浏览器执行、到部署与缓存优化,完整覆盖了 AI Web 化落地的关键环节。对于做前端 AI、模型部署或开发者工具的人来说,这篇文章的价值不在“结果很酷”,而在于它清楚展示了当下浏览器本地推理的边界与工程路径。

工程实践Simon Willison

Datasette Apps: Host custom HTML applications inside Datasette

这篇文章介绍了 Datasette 新插件 datasette-apps:在严格隔离的 iframe 沙箱中运行自定义 HTML+JavaScript 应用,让应用能够在浏览器侧发起受控的只读 SQL 查询,并在授权后使用存储查询执行写操作。作者重点解释了安全设计:通过 sandbox、CSP 和 MessageChannel 把未信任代码限制在最小权限范围内,避免读取 cookie、localStorage 或向任意外部主机泄露数据。文章还展示了查询与错误日志可见化、基于提示词一键生成应用、以及与 Datasette Agent 结合的 AI 辅助开发流程。一次安全评估还发现了允许普通用户放行 CSP 域名会导致越权 exfiltration 的漏洞,最终通过新增 apps-set-csp 权限和管理员级白名单修复。整体看,这是一个把可视化前端、数据库访问和 AI 编程结合起来的工程化方案,但当前写操作仍依赖预设存储查询,适合受控场景,不适合开放式任意执行环境。

推荐收录,因为文章给出了可验证的工程实现细节:iframe 沙箱、CSP、MessageChannel、存储查询和权限修复都直接对应真实安全约束。适合做前端安全隔离、受控数据库写入和 AI 辅助应用生成的参考,尤其对需要在高敏感数据域内开放扩展能力的系统有迁移价值。

工具笔记Simon Willison

<click-to-play> — a still that plays

这篇文章介绍了一个名为 <click-to-play> 的 Web Component,用来把“GIF 链接 + 首帧图片”的标记包装成可点击播放的静态预览。其核心思路是先只渲染首帧和播放按钮,等用户主动点击后再按需加载真正的 GIF,从而避免页面首次打开就下载大体积动画。作者强调这是一个 progressive enhancement 方案:即便脚本未运行,原始链接与图片也仍可作为降级内容使用。文章还给出了在 Datasette 示例中的实际应用,说明它适合文档、演示页和大量使用动图说明功能的场景。该方案的边界在于主要面向 GIF 这类重资源媒体,对 Web Components 和 JavaScript 可用性有一定依赖。

文章直接展示了可复用的组件接口、标记结构和按需加载机制,不是单纯的想法分享,适合做前端性能优化与组件封装的参考。对需要在文档、博客或产品页中展示动图但又要控制首屏体积的开发者尤其有用。

工具笔记Simon Willison

Publishing WASM wheels to PyPI for use with Pyodide

这篇文章围绕 Pyodide 新增的能力展开:Python 包现在可以像原生平台轮子一样,直接把面向 PyEmscripten 的 WASM wheel 发布到 PyPI,并在运行时安装。作者指出,过去 Pyodide 团队要维护、构建和托管 300 多个包,人工审核成本高,新的分发路径显著降低了社区发布门槛。随后他用自己的 luau-wasm 实验包做了验证:通过 cibuildwheel、GitHub Actions 生成并上传 wheel,再在 Pyodide 中用 micropip 安装后执行 Lua 代码。文中还用 BigQuery 统计了当前带有 pyemscripten_202*_wasm32 标签的 PyPI 包,说明生态已经开始落地但规模仍然有限。文章价值主要在于揭示 WASM Python 包分发链路的变化与实操入口,边界是它更偏发布/工具链更新,而不是深入解释 Pyodide 运行机制。

有明确的直接证据:Pyodide 314.0 已支持把 WASM wheel 直接发布到 PyPI,作者还给出了 luau-wasm 的打包、上传和运行示例。适合需要把 C/C++/Rust 扩展带到浏览器或 Pyodide 环境的维护者参考,但要注意这篇更偏分发工具链更新,生态仍处于早期。

技术文章Xe Iaso

IPv6 zones in URLs are a mistake

这篇文章围绕 IPv6 zone/scope 在 URL 中的表示问题展开,先解释了链路本地地址在不同网卡上会冲突,因此需要用 zone 来消歧义,再说明在 Go 的 net/url 中直接写入 `%eth0` 会被当作非法转义。作者进一步给出正确写法:需要把 `%` 编码成 `%25`,并结合 RFC 6874、浏览器同源策略和其他框架的类似边界案例,说明这是一个跨协议栈、跨实现的长期边缘问题。

推荐收录,因为它不是泛泛讲 IPv6,而是把网络地址语义、URL 语法、Go 标准库行为和相关 RFC 的边界完整串起来,能帮助读者避免真实系统中的解析错误。虽然主题很边缘,但这类协议细节具有很强的可迁移价值,尤其适合做网络编程、URL 处理和标准兼容性排障参考。

技术文章matklad

CSS: Unavoidable Bad Parts

这篇文章是一篇面向“不是 Web 开发者、但需要把页面样式做对”的 CSS/HTML 实用导读,作者试图提炼出一个足够小、可学习的现代 Web 子集。文章围绕语义化标签、CSS reset、classless CSS、box-sizing、margin collapsing、flexbox、响应式设计以及字体尺寸、行高、断行等常见坑展开,强调应优先理解浏览器默认行为和布局约束,而不是把 CSS 当成纯粹的样式拼装。

推荐收录,因为它不是泛泛而谈的 CSS 入门,而是把“简单博客/轻量 GUI 真正会踩的坑”集中梳理成一套可执行经验。对需要快速建立网页样式直觉的工程师很有参考价值,尤其适合非前端背景但要维护页面可用性和可读性的人。

学习路线知乎 - NGINX洪志道

01-完全没基础,怎么开始学编程

这篇文章面向完全零基础的人,提出一条“先建立编程感觉、再补语言体系”的入门路径。作者主张用 JavaScript 和浏览器 Console 作为第一门工具,只学习顺序、条件、循环、变量、值与表达式、函数这六个最基础概念,并用“手机电量”这一单一主线把知识点串起来。文章还强调必须通过复制、修改、运行、观察结果的循环来学习,并把“能独立写出类似小程序”作为真正学会的标准。

推荐收录,因为它不是泛泛而谈“如何学编程”,而是给出了面向零基础学习者的具体起点、知识范围和练习方式,具备明确的可执行性。其价值在于帮助初学者避开环境配置、框架和概念堆砌带来的挫败感,适合作为编程启蒙的长期参考。

工具笔记Go Blog

Introducing the pkg.go.dev API

本文介绍 Go 官方 pkg.go.dev 新增的程序化访问 API,面向工具、IDE 集成和自动化工作流提供模块与包元数据查询能力。API 采用无状态、仅 GET 的设计,当前以 /v1beta 形式提供,覆盖 package、module、versions、packages、search、symbols、imported-by 和 vulns 等核心端点,并同时发布 OpenAPI 规格。文章强调“precision over convenience”:当同一包路径可能由多个模块提供时,API 不像网页端自动猜测,而是要求客户端显式指定模块,否则返回歧义错误。版本控制支持语义化版本以及 main/master 分支自动解析为 pseudo-version,但不支持任意分支名。文中还给出 pkgsite-cli 参考实现,展示如何在终端搜索、查看符号、列出版本与依赖导入者;其边界是 beta 接口仍可能演进,CLI 也尚未稳定。

这篇文章给出了官方 API 的端点、版本规则、歧义处理和 OpenAPI 规格,属于可直接用于工具集成的实用参考,不是单纯的产品宣传。适合做 Go 生态工具、IDE 插件或自动化脚本的读者借鉴,但需注意当前仍是 v1beta,且参考 CLI 接口并未完全稳定。

工程实践知乎 - 鹅厂架构师

两个字符让Django接口快了8倍:一次险些翻车的线上性能排查实录

这篇文章复盘了一次老 Django 接口的线上性能排查,围绕 10000+ 条数据、7MB 响应体和高频调用场景,逐步验证了 ORM 对象构造、values() 直出、字段裁剪、JSON 序列化、gzip 等多个假设。作者最终通过 TTFB/Total 对比、本机回环测试和代码审查,发现真正的瓶颈不是数据库或网络,而是把完整字符串错误地交给 StreamingHttpResponse 导致逐字符输出,修复后接口从 13.6 秒降到 1.7 秒。文章还总结了如何用数据而不是直觉定位 HTTP 性能问题,并说明了该结论对真正流式接口与大对象返回的适用边界。

推荐收录,因为它不是单纯的“改一行代码变快”故事,而是完整展示了从经验判断到数据验证、从错误归因到根因定位的工程排查过程。对做 Web 后端、Python/Django、线上性能治理的读者都有很强的迁移价值,尤其适合理解 TTFB、响应体输出链路和“看起来没错的代码”带来的隐性性能坑。

工具笔记知乎 - 千问云

浏览器自动化:从GUI到OpenCLI

文章讨论了浏览器自动化从“直接操控GUI”转向“解析并复现底层API请求”的方法,核心目标是提升自动化的稳定性、效率和可维护性。作者进一步提出了 OpenCLI 的工作流:通过浏览器观察、网络抓包、鉴权策略分层和适配器生成,把网站能力包装成可调用的 CLI,并明确指出了当前对写操作、请求体捕获等场景的局限。文章最后延伸到“面向 Agent 的可调用性”这一判断,认为未来软件的重要竞争点之一将是是否容易被自动化系统稳定调用。

推荐收录,因为它不仅讲了一个具体工具,还总结了从 UI 自动化转向 API 自动化的可迁移方法,特别适合做开发工具、Agent 工程和浏览器自动化的参考。文章同时给出了认证分层、探索流程和局限边界,具有较强的实践指导意义,而不是停留在概念宣传。

工程实践Yelp Engineering

How Yelp Keeps Server-Driven UI Consistent Across Four Platforms

文章接着前文介绍 Yelp 的 server-driven UI 框架 CHAOS,重点讲它如何与跨平台设计系统 Cookbook 以及自动生成的桥接库 Konbini 协同工作。作者先说明 Yelp 与 Yelp for Business 在 Web、iOS、Android 上存在多套界面变体,导致视觉与交互一致性难以维护。随后描述如何把设计系统组件抽象成可复用的 SDUI 组件,并通过桥接层把同一套定义映射到不同平台渲染实现。文章也讨论了自动生成桥接代码在减少重复劳动、降低差异漂移方面的作用。它更适合已有多端应用和设计系统的团队参考,但前提是组件边界清晰、平台能力差异可被抽象,否则一致性和灵活性仍会冲突。

推荐收录,因为正文直接围绕 CHAOS、Cookbook 和 Konbini 的集成展开,讨论了如何在 Web、iOS、Android 多端保持界面一致,并用自动生成桥接层降低实现分叉。适合做多端产品、设计系统或 SDUI 落地的团队参考;可迁移价值在于组件抽象、跨平台映射和减少重复代码,但也依赖平台差异可被稳定封装。

技术文章Josh W Comeau

An Interactive Guide to SVG Paths

这篇文章是一篇面向前端开发者的 SVG path 交互式教程,核心目标是把最难理解的 `<path>` 元素拆解清楚。作者从 SVG 基本图元讲起,重点解释 path 的紧凑命令语法、坐标含义以及常见指令如何组合成线段、曲线和闭合路径,并通过交互示例帮助读者把“字符串”直观映射到实际图形。文章强调,path 的强大之处在于用一套统一表达方式描述复杂轮廓,因此既能画简单图标,也能处理更复杂的矢量形状。它同时也揭示了该元素的学习门槛:语法高度压缩、可读性差,需要结合可视化工具和反复练习才能掌握。整体更偏向“理解与手写 path”的基础教程,而不是 SVG 渲染原理、动画系统或工程集成方案。

文章直接围绕 SVG `<path>` 的语法与可视化理解展开,属于前端与网页图形开发中长期可复用的基础知识。适合需要手写图标、图表或矢量路径的开发者,交互式讲解对建立坐标与曲线直觉尤其有帮助。

技术文章Josh W Comeau

An Interactive Guide to CSS Grid

这篇文章是一篇面向前端开发者的 CSS Grid 交互式教程,目标不是罗列属性,而是建立可操作的心智模型。作者从网格容器、行列轨道、隐式网格、项目定位与跨列跨行等核心概念入手,结合可视化示例解释 Grid 在二维布局中的工作方式。文中还强调了 fr、minmax、gap、auto-flow 和对齐规则等常用能力,帮助读者理解轨道尺寸分配与自动放置的结果。文章的重点在于把“看懂布局结果”与“预测布局行为”连起来,而不是背诵 API。它适合需要系统掌握现代网页布局的工程实践者,但对只想快速完成单页排版的人来说内容会偏深入。

收录依据很明确:文章围绕 CSS Grid 的概念模型、属性机制和布局结果展开,并通过交互示例帮助读者形成可迁移的理解。适合前端工程师、UI 开发者以及需要从 Flexbox 过渡到二维布局的人长期查阅。

技术文章Josh W Comeau

The “const” Deception

文章围绕 JavaScript 中 `const` 的常见误解展开,指出它并不等于“值不可变”,真正限制的是变量绑定不能被重新赋值。作者重点区分了“assignment(重新赋值)”和“mutation(修改对象内容)”,解释为什么用 `const` 声明的对象和数组仍然可以被修改。文中通过具体示例说明,原始值与引用类型在行为上的差异,以及开发者为何会误把“不可重新指向”理解成“完全冻结”。文章的核心结论是:`const` 适合表达不变的绑定意图,但并不能替代不可变数据结构或深冻结机制。适合已经写 JavaScript、需要减少状态管理和数据共享误解的前端/全栈开发者参考。

推荐收录,因为它直接针对 JavaScript 中最容易被误用的基础概念,且用“赋值 vs 修改”这一可迁移框架解释了 `const` 的真实语义。对前端、全栈和状态管理场景尤其有用,能帮助读者避免把语法约束误当成数据不可变,降低代码理解和维护风险。

技术文章Josh W Comeau

An Interactive Guide to Flexbox

这篇文章以交互式方式讲解 CSS Flexbox 的工作机制,而不只是罗列属性含义。作者从布局算法入手,说明容器与子项在主轴、交叉轴上的尺寸分配、对齐和换行规则,帮助读者理解为什么同一组样式在不同约束下会得到不同结果。文章的重点不在“怎么记属性”,而在于把 flex-grow、flex-shrink、flex-basis 等概念串成可预测的布局模型。它特别适合需要构建自适应页面、减少断点依赖的前端开发场景。局限在于内容偏基础到进阶入门,对复杂布局仍需结合实际浏览器行为与其他 CSS 布局方案一起理解。

推荐收录,因为标题和导语已经明确表明它不是浅层速查,而是围绕 Flexbox 算法与布局规律展开的交互式教程。适合前端工程师、UI 实现者和需要补齐 CSS 布局心智模型的读者,迁移价值在于能直接提升对自适应布局和属性联动的判断能力。

技术文章Josh W Comeau

Designing Beautiful Shadows in CSS

这篇文章围绕“如何用 CSS 设计更自然、更有质感的阴影”展开,先指出网页上常见的灰色模糊阴影过于单调,再说明阴影其实可以通过 CSS 做出更接近真实光照的层次效果。作者以视觉设计为切入点,强调阴影不仅是装饰,还承担空间分层、强调主体和塑造材质感的作用。文章的核心思路是把阴影当作可控的光学效果来设计,而不是简单套用默认参数,从而获得更丰富、更具生命力的界面表现。它更适合前端界面设计和组件细节优化,尤其适合需要提升视觉品质的产品页、组件库和交互界面。其边界在于这类技巧高度依赖具体背景、元素形状和整体视觉语言,不能机械套用到所有场景。

推荐收录,因为标题和导语直接表明它不是泛泛而谈,而是专门讲 CSS 阴影的设计方法,属于可迁移的前端视觉实现经验。适合做界面细节打磨、设计系统和组件库开发的读者参考,但需要结合具体主题色、光源方向和可读性约束使用。

技术文章Josh W Comeau

An Interactive Guide to Keyframe Animations

这篇文章是一篇围绕 CSS keyframe animations 的交互式教程,目标是从底层机制解释关键帧动画如何工作。作者先说明 keyframes 为什么灵活但也容易让人困惑,再通过逐步拆解动画声明、时间轴和关键帧配置,帮助读者建立对动画执行过程的直觉。文章强调的不只是语法用法,还包括如何利用关键帧组合出更高质量的动效,并理解何时适合使用这种方案。它更适合希望提升前端动效能力的读者,尤其是需要把动画效果做得稳定、可控且可维护的人。不过,作为教程类内容,它的长期价值主要来自原理讲解和实践模式,而不是特定项目经验。

文章明确聚焦 CSS keyframe animations 的原理与用法,不是浅层语法速览,而是从机制层面帮助读者建立动画模型。适合前端开发者、动效实现者和需要写可维护交互动画的工程场景,迁移价值主要在于对时间轴、关键帧和表现控制的理解。

工程实践Josh W Comeau

How I Built My Blog

这篇文章系统拆解了作者个人博客的技术实现,重点不是展示页面效果,而是解释背后的前端架构与内容组织方式。文章提到他用 Next.js 的 API routes 实现访问量和点赞计数,用 MDX 在文章中嵌入交互与定制化能力,并进一步说明了代码库的组织方式与维护思路。整体上,它把一个内容型网站如何兼顾静态发布、局部交互和开发体验讲得较完整,适合做个人站点或内容产品的实现参考。它的边界也很清楚:主要针对博客这类中小型 Web 项目,方法高度依赖 Next.js/MDX 生态,未必适用于复杂后端系统。

文章给出了可验证的实现细节:Next.js API routes、MDX 互动内容和代码库组织,而不是泛泛讲博客理念,具备直接参考价值。适合前端工程师、个人站点作者或内容型产品开发者阅读;可迁移的价值在于内容站如何在静态性、交互性和维护成本之间做取舍,但技术栈较框架化。

技术文章Josh W Comeau

What The Heck, z-index??

这篇文章围绕 CSS 中最容易误解的 z-index 现象展开,解释为什么元素的数值看起来更大,却仍然无法覆盖到预期层级。作者重点讲解了 stacking context 的形成条件、层叠顺序以及父子层级之间的限制,说明 z-index 不是全局排名,而是受局部上下文约束的比较规则。文章还进一步讨论了哪些属性会触发新的 stacking context,以及这会如何改变定位、遮挡和弹层行为。最后,作者给出利用这一机制组织页面层级的思路,帮助读者从“调数值”转向“理解上下文”。它的适用范围主要是前端布局与视觉层级排查,不涉及更广泛的浏览器渲染内核细节。

推荐收录,因为文章直接针对 z-index 失效这一高频前端问题,明确解释了 stacking context 的规则与触发条件,而不是停留在经验性排错。适合需要处理弹层、遮罩、菜单和复杂布局的前端开发者,具有很强的可迁移排障价值。

技术文章Josh W Comeau

The Rules of Margin Collapse

文章系统讲解了 CSS 中“外边距折叠”的成因与判定规则,目标不是背结论,而是用一组可执行的原则理解它何时发生、何时不会发生。作者围绕块级元素的上下外边距,分别分析了兄弟元素、父子元素以及空元素场景下的折叠行为,并说明了边框、内边距、内容高度、清除浮动或形成新的格式化上下文等因素为何会阻止折叠。文中强调,外边距折叠并非随机怪现象,而是由布局规范驱动的确定性结果。通过这些规则,读者可以更可靠地预测间距表现,避免用试错方式调 CSS。文章适合希望深入理解浏览器布局机制的前端开发者,但对完全不熟悉 CSS 盒模型的人仍有一定门槛。

收录理由明确:文章不是泛泛介绍 margin collapse,而是把触发条件、阻断条件和典型场景拆成可操作规则,属于可长期复用的 CSS 机制解析。适合前端开发者、样式排障和布局体系设计者阅读,尤其有助于减少对“玄学间距”的试错。

技术文章Josh W Comeau

Boop!

这篇文章是一篇面向 React 前端开发的深入教程,目标是实现一种轻量但很有表现力的“boop”交互效果。作者不是直接堆动画代码,而是把交互行为抽象成可复用的 React 组件与 hooks,强调将“行为逻辑”和“渲染表现”解耦。文章同时讨论了如何设计一个足够简洁、又能覆盖多种使用场景的 API,让调用方只需少量代码就能复用这套交互。它的核心价值不在于某个特定动效本身,而在于展示如何用 React 组织可组合行为、管理状态切换与时序,并把体验细节封装成稳定接口。适用范围主要是 Web/前端交互实现,对通用架构或复杂动画引擎的讨论较少。

文章给出了从交互效果到可复用抽象的完整实现思路,直接体现了 hooks、组件封装和 API 设计的实践证据。适合关注 React 前端、交互设计和可组合封装的读者,尤其适合作为“如何把一个小效果做成可复用能力”的参考。

技术文章Josh W Comeau

Full-Bleed Layout Using CSS Grid

文章围绕现代前端中常见但实现别扭的 full-bleed 布局展开,目标是在同一页面里同时保留居中正文和通栏内容。作者以 CSS Grid 为核心,拆解了网格轨道、内容容器与全宽元素之间的关系,说明如何用一套统一的网格定义让图片、横幅或代码块突破正文栏宽限制而不破坏整体排版。文章重点在于通过 Grid 的显式轨道和对齐机制减少额外嵌套与定位技巧,从而让布局规则更清晰、可维护性更高。它更适合作为 CSS 布局思路的参考,而不是面向所有场景的通用模板;对于需要复杂响应式排版或内容混排的页面尤其实用。其边界在于依赖 CSS Grid 支持,并且需要结合具体设计系统调整间距、宽度和断点。

收录理由明确:正文直接说明是“用 CSS Grid 构建 full-bleed layout”的教程,属于可复用的前端布局方法而非产品介绍。适合前端开发者、设计系统维护者和需要处理复杂内容排版的工程场景,迁移价值在于统一居中正文与通栏元素的布局策略。

技术文章Josh W Comeau

Accessible Animations in React

这篇文章讨论 React 中如何实现“可访问的动画”,核心目标是尊重用户对减少动态效果的偏好,避免动画给部分用户带来不适甚至眩晕。作者从前端动画的实际问题出发,介绍如何检测系统级的 prefers-reduced-motion 设置,并据此在组件层面切换为弱化或关闭动画的实现。文章强调,动效不是必须一刀切删除,而是应根据用户偏好动态调整强度、时长和呈现方式。它适合指导交互动画、页面过渡和 UI 反馈的无障碍改造,但主要覆盖的是“减动效”这一维度,不能替代更完整的可访问性设计。

收录价值明确:标题和简介都直接指向 React 中的 prefers-reduced-motion 处理,这是前端无障碍里可长期复用的具体做法。适合做组件库、交互动画和产品 UI 的开发参考,尤其对需要兼顾视觉效果与用户舒适度的场景很有迁移价值。

技术文章Josh W Comeau

Styling Ordered Lists with CSS Counters

这篇文章讨论如何在不破坏语义结构的前提下美化有序列表。作者指出,直接改写默认编号样式常常受限于浏览器对列表标记的封装,因此引入 CSS counters 作为替代方案,让开发者可以完全控制编号的展示方式、位置和视觉细节。文章的核心思路是:保留 `ol`/`li` 的语义,再用计数器生成自定义序号,从而兼顾可访问性与定制能力。它适合需要精细排版、品牌化列表样式或复杂嵌套编号的前端场景,但本质上仍是展示层技巧,不适用于需要改变文档结构或交互逻辑的情况。

推荐收录,因为它直接给出了用 CSS counters 处理有序列表样式的可复用技巧,并明确强调了“自定义外观但不牺牲语义”这一关键边界。对前端开发者、设计系统维护者和需要精细排版的页面实现场景都很实用,迁移到其他列表编号需求也很容易。

技术文章Josh W Comeau

The Perils of Hydration

这篇文章围绕 React/Gatsby 中的 hydration(重新注入/再水合)问题展开,指出一个很常见但容易被忽视的误解:预渲染出来的页面并不等于最终可交互状态,服务器输出与客户端首次渲染之间的差异会引发难以定位的界面异常。文章以深度教程的方式解释了静态预渲染、客户端补水以及二者约束之间的关系,说明为什么个性化、依赖浏览器环境或实时数据的内容会与 SSR/SSG 产生冲突。作者进一步讨论了常见的规避方式,例如延后仅客户端逻辑、拆分服务端壳与客户端动态区、用占位内容避免初始不一致。整体结论是:hydration 本身不是 bug,而是预渲染架构的必然边界,真正需要处理的是内容一致性与交互时机的设计。适用场景主要是使用 React、Gatsby 或类似前后端同构方案的网页应用,但对高度动态、强个性化页面仍需谨慎。

收录依据很明确:文章不是泛泛讲概念,而是直接围绕预渲染与 hydration 不一致导致的渲染故障,给出可操作的规避思路。适合使用 React/SSR/SSG 的前端工程师阅读,尤其在排查首屏异常、内容闪烁和服务端/客户端不一致时具有迁移价值。