架构实战与 技术博文
分享基于 Cloudflare 生态、TiDB Serverless 以及 AI 驱动开发的实战经验。
Markdown 引擎对比:marked / markdown-it / remark 怎么选
JavaScript 生态里有三个主流 Markdown 引擎,但 90% 的项目随手就选了第一个搜索结果。本文从性能、扩展性、安全性、生态四个维度对比 marked / markdown-it / remark,给出明确的选型建议。
为什么我们用 CodeMirror 6 而不是 Monaco
Monaco 是 VS Code 同款编辑器,看起来是默认选择。但当你在做工具站、笔记应用、轻量 IDE 时,CodeMirror 6 在 bundle 体积、可组合性、移动端体验上有压倒性优势。本文是一次真实选型的决策记录。
Cron 表达式 vs setInterval:定时任务的两种世界观
都是「每隔多久跑一次」,为什么后端任务用 cron、前端用 setInterval?本文讲清楚两者在精度、漂移、容错、可观测性上的本质差异,以及什么时候该升级到 BullMQ / Temporal。
cURL 转代码背后:16 种语言的 HTTP 库怎么选
把一行 curl 命令转换成 Python / Go / Node / Rust 等 16 种语言的等价代码——背后是各语言生态里 HTTP 库的设计哲学差异。本文横向对比 requests / httpx / axios / fetch / reqwest / OkHttp 等主流选项的取舍。
随机性陷阱:Math.random() vs crypto.getRandomValues()
前端为什么不能用 Math.random() 生成密码、token、CSRF nonce 或抽奖结果?本文讲清楚伪随机 vs 密码学随机的本质差异、modulo bias 拒绝采样的正确写法,以及 V8 的 xorshift128+ 为何能被反推。
JWT 安全实践:为什么不要在前端验签
把 JWT 验签放在前端——这个常见反模式会让你的鉴权形同虚设。本文讲清楚 JWT 的三段结构、前端能做什么不能做什么,以及后端 5 个常见验签漏洞与正确实现。
TiDB Serverless 架构迁移实战
记录一次将传统数据库迁移到 TiDB Serverless 的完整过程,包括成本优化与性能测试分析。