CSP 管得住脚本从哪个域加载,管不住页面自己往 innerHTML 里塞了什么字符串。Trusted Types 把危险 DOM Sink 的写入变成浏览器强制审查,这篇讲它的机制、落地代码和撞见的真实麻烦。
团队要做一个多人协同编辑的功能,传统的后端合并冲突加乐观锁在多人同时改同一段内容时很难写干净;记录一下改用 CRDT、用 Yjs 落地协同文档的过程,以及这套方案要付出的代价。
Svelte 4 的响应式声明依赖编译期静态分析,没法在组件外的普通模块里复用;Runes 用 `$state`、`$derived`、`$effect`、`$props` 这套显式 API 解决了这个问题,这篇记录我们把内部发布看板一部分模块迁移到 Runes 后的具体判断。
几十万个点位的散点图在 Canvas 2D 下卡到没法交互,换 WebGL 也只是把卡顿从主线程挪到了每帧几千次 draw call 上——记录我排查这个瓶颈、最终用 WebGPU 的 Compute Shader 重写数据聚合逻辑的过程。
评估一个离线优先的文档编辑器要不要把数据存进浏览器时,IndexedDB 的异步 API 在高频写入场景下写起来啰嗦、性能也一般,OPFS 提供的同步访问句柄和更接近真实文件的操作方式是另一条路,这篇讲清楚它的存储模型、权限模型、和 IndexedDB/Cache Storage 的分工,以及配额和数据清除时该怎么应对。
Speculation Rules API 能让浏览器提前预取甚至预渲染下一跳页面,比 link rel=prefetch 和悬停预加载库更进一步,但预渲染错页面会白白浪费带宽,预渲染有副作用的页面还可能提前触发埋点或写操作,这些代价得先算清楚。
长任务把主线程堵住的时候,setTimeout(fn, 0) 和 requestIdleCallback 都救不了场——scheduler.postTask() 的优先级参数和 scheduler.yield() 的循环内让出,才是浏览器原生给出的任务调度方案。
light-dark() 函数和 color-scheme 属性能不能替换项目里现有的暗色模式实现,这篇给出具体判断标准:暗色变量数量、是否依赖 data-theme 做第三方组件适配,以及原生表单控件、滚动条怎么借 color-scheme 自动换色。
记录给后台表格行加一个操作菜单时,把原本要手写的 z-index、点击外部关闭、Esc、焦点管理和定位计算,逐步换成 popover 属性、dialog 元素和 CSS 锚点定位的过程,附选型判断和可运行代码。
Date 对象在时区、夏令时和月份索引上的历史包袱一直没解决,这篇讲 TC39 Temporal API 的对象设计、时区处理方式、不可变性的实际收益,以及在账单周期计算这类场景里落地的判断过程。