博客 · 第 9 页
关于工程、设计与一些随手记录。
结构化日志不是把 println 换成 tracing::info
拼接字符串的日志只能被人眼读,带字段的日志才能被查询和聚合。字段、span、级别、以及别在热点路径上格式化,是四个真正要做的决定。
Islands 不是 Web Components:两种「按需加载」根本不是一回事
Islands 在构建期决定哪里需要 JS、什么时候水合;Web Components 在运行时给浏览器一个自带行为的元素。把它们当成同一件事,会选错工具。
静态站的缓存头:带哈希的永久,HTML 一律不缓存
缓存策略只取决于文件名是否随内容变化,与文件大小无关。HTML 长缓存会让用户拿到旧入口、指向已删除的旧 chunk,是静态站最常见的线上白屏。
WebAssembly 值得用的场合,比宣传里少得多
WASM 的收益来自「计算密集 + 大批量数据 + 少的跨界调用」。把一个 O(n) 的 JS 循环改写成 WASM,通常只会得到更慢的加载和更难调的栈。
锚点跳转被页头吃掉:一次 scroll-padding-top 修全站
吸顶页头会盖住锚点目标,逐个标题写 scroll-margin 迟早漏。正确的位置是滚动容器上的 scroll-padding-top,再用 ResizeObserver 把真实页头高度写回令牌。
模态框用原生 dialog:白拿的东西比想象中多
自己搭模态要手写焦点陷阱、ESC、滚动锁与返回焦点。原生 dialog 配 showModal 全部内置,还能用 ::backdrop,代价只有一条样式继承规则。
