-
ReadableStream.getReader() 的关键不是一次性拿到完整文件,而是取得一个 reader 后反复调用 read() 消费数据块。本文从文件流上传场景出发,说明锁定语义、Uint8Array 分块、fetch 请求体、完成与取消处理,以及默认 reader 和 BYOB reader 的选择边界。
-
处理 fetch、文件或其他 ReadableStream 的分块字节时,可以用 TextDecoderStream 把它们接成连续文本流,再通过 for await...of 持续消费。本文说明 pipeThrough、UTF-8 分块边界、fatal 与收尾处理。
-
View Transition types 用字符串区分前进、后退和其他导航,再由 :active-view-transition-type() 选择动画。本文分别说明 SPA、跨文档导航、动态类型和兼容性边界。
-
前端 source map 不只是调试开关,也决定了浏览器能看到多少源码信息。本文从 sourceMappingURL、sourcesContent 和生产构建策略入手,说明如何把调试地图留在受控错误上报链路中。
-
Vue watch 深度监听要先区分对象替换与嵌套变更,再按范围选择精确 getter、deep: true、Vue 3.5+ 数值 deep 或 watchEffect,并处理旧值引用与异步清理。
-
XState 父状态机向子 actor 发事件时,关键是区分 actor logic、invoke id 和 actor ref。本文用 XState v5 示例说明 sendTo 的固定 ID 写法、spawn 动态引用和事件未处理时的三层排查方法。
-
Service Worker 只缓存同源静态资源时,关键是同时检查请求 origin 和 Request.destination,排除接口、页面导航与跨源资源,再用 Cache.match、fetch 和 Cache.put 组成缓存优先策略。本文还说明 HTTPS、localhost、作用域和缓存版本更新的排查边界。
-
D3 data join 默认按位置匹配,列表重排后容易让 DOM 节点状态跟错对象。本文用稳定且唯一的 id 作为 key,说明 update、enter、exit 的对应关系,以及排序、重复 key 和 DOM 顺序的边界。
-
URLPattern 可以用 pathname 命名组匹配前端路径,并从 exec 结果中读取 userId 等参数。本文说明 test 与 exec 的分工、斜杠和查询串边界,以及不支持 URLPattern 时的 URL 降级思路。
-
CSS hanging-punctuation 可以把行首的开括号或引号、行尾的闭括号或引号,以及符合条件的逗号和句号放到行框外侧。本文从三类标点位置出发,说明 first、last、allow-end 的组合方式,并解释浏览器支持和布局条件带来的显示差异。
-
用 PerformanceObserver 订阅 longtask 条目,分清 buffered 回放、duration 与 attribution 的读取方式,并补上支持检测、批量上报和断开观察器的处理边界。
-
IntersectionObserver 可以按目标与视口的交集比例触发加载;本文用 threshold、rootMargin 和共享 observer 解释可见性加载,并说明 unobserve 与 disconnect 的生命周期边界。
-
用 WebSocket close 事件中的 code、wasClean 和 reason 区分完成关闭握手、服务端主动关闭与底层网络丢失,并把 error、清理和退避重连放到同一套判断里。
-
用一个同源多页网站实例讲清跨文档 View Transition:双端开启、旧新快照、共享元素命名、自定义动画、减少动态效果适配与常见失效排查。
-
CSS 的 display 默认不能像 opacity 一样平滑过渡。本文用一个可关闭提示面板说明 transition-behavior: allow-discrete、display 过渡和 @starting-style 如何配合,并给出旧浏览器降级写法。