nenufm.com

留声

写 AI、编程笔记和日常折腾的工具,记录遇到的问题、踩过的坑和解决过程,也聊互联网见闻,以及工作之外的生活。

编程笔记
Taro 微信小程序实时倒计时跳秒与节点累积排查
复盘 Taro 微信小程序实时倒计时跳秒、多端相差数秒和 fixed 覆盖层节点持续累积的问题:解释逐秒广播为什么不等于时钟,用服务端截止时间与 RTT 中点校时统一时间轴,把 0 建模为完整刻度,并通过单一宿主节点避免动画更新反复追加视图。
编程笔记
Taro 微信小程序中文字体裁剪与源码内联
记录在 Taro 微信小程序中引入少量中文展示字体的完整方案:用 Node 与 subset-font 从 Noto Sans CJK SC Black 裁出固定字符,校验上游文件后生成内联 WOFF CSS,将约 17.8 MB 的源字体缩到 5 KB,并说明字符维护、授权保留和真机验证边界。
编程笔记
Taro 4.2.1 使用 Vite 构建微信小程序时 common.js 为什么这么大
复盘 Taro 4.2.1 使用 Vite 构建微信小程序时 common.js 接近 855 KiB 的排查过程:从 Rollup 分块源码确认公共代码的来源,并通过构建前后文件对比说明 optimizeMainPackage 在当前 Vite 构建链中没有产生预期效果。
编程笔记
Protobuf 与 Buf 实战:TypeScript WebSocket 服务端发送与客户端接收
记录如何用 Protobuf、Buf 和 ts-proto 为 TypeScript WebSocket 生成客户端与服务端类型,并完成二进制消息的编码发送、ArrayBuffer 接收解码、oneof 分发和字段安全演进,同时说明 optional、int64、默认值与 reserved 的常见误区。
编程笔记
实时追加列表为什么使用游标分页
记录一次实时追加列表的分页设计:为什么 OFFSET 在新数据持续插入时会重复或漏项,怎样用自增 ID 作为 Keyset Cursor 稳定加载旧记录,以及如何用 pageSize + 1 判断 hasMore,避免额外 COUNT 和空页请求。
部署记录
Docker PostgreSQL 15 升级 18:一次耗时三小时的全实例迁移记录
记录一次 Docker PostgreSQL 15 升级到 18 的真实排障过程:从 pgAdmin 4 还原报错、PGDATA 挂载错误和空库误判,到使用 pg_upgrade 升级副本并核对完整实例;也重新审视 PostgreSQL 工具生态与快速开发中的数据库选型。
PostgreSQLDockerpg_upgrade数据库选型查看正文 →
编程笔记
创建表单为什么会发出 PATCH /undefined
复盘一个 React/Taro 共用表单把初始发布误判为编辑、最终请求 PATCH /resources/undefined 的问题:如何从请求方法和载荷确认分支,用可辨识联合约束子组件属性,判断客户端状态检查的合理位置,并避免把局部修复扩张成全局 ID 校验。
编程笔记
Bun Worker:TypeScript 服务端的本地调试与生产运行
记录 Bun TypeScript 服务端为解决 Worker 无法在 VS Code 命中断点而形成的双运行结构:调试时通过 RUN_WORKER_IN_MAIN 把同一循环放回主线程,生产仍使用独立 Worker,并说明 isMainThread、postMessage、双入口构建与 Docker 启动。
部署记录
acme.sh 自动更新阿里云 CDN 与 DCDN 证书:多账号部署与排错
介绍如何使用 acme.sh 和阿里云 DNS 签发通配符证书,并自动更新多个阿里云账号下的 CDN 与 DCDN 证书。结合一次线上证书过期故障,说明 Le_DeployHook 被覆盖后为何会出现本地续签成功、线上证书仍未更新,并给出多账号部署钩子、日志留存和证书指纹核对方法。
acme.sh证书CDN查看正文 →