OpenReplay 博客
使用 Web Locks API 修复 Token 刷新竞态
使用 Web Locks API、navigator.locks.request 和令牌重检查,解决标签页间的令牌刷新竞态并防止登出。
在浏览器中通过 OPFS 运行 SQLite
在浏览器中使用SQLite与OPFS:配置Worker,选择opfs或opfs-sahpool,并避免静默回退到内存数据库。
无需 JavaScript 即可控制 Web 组件
使用自定义 invoker commands 仅靠 HTML 控制 Web 组件。了解 command 和 commandfor 如何在无需 JavaScript 的情况下连接按钮与自定义元素。
如何修复 SPA 部署后出现的 Cannot GET 错误
通过 Nginx、Apache、Netlify、Vercel 和 S3 CloudFront 的服务器重写,修复部署后 SPA 的 Cannot GET 和 404 错误。
别让标题在错误的位置换行
用合适的 CSS 和 HTML 修复标题断行和长 URL:nbsp、wbr、overflow-wrap:anywhere、word-break:break-all、hyphens:auto、text-wrap。
用 Node 内置测试运行器替代 Jest
对比 Node test runner 与 Jest:稳定功能、watch mode、snapshot、fake timers、coverage、TypeScript 支持,以及迁移时的限制。
用状态机构建一个测验应用
使用 React 和 XState v5 构建测验应用。将四个界面建模为状态机,替换布尔标志,并守护最终结果状态。
幂等性详解及其对 API 的意义
解释幂等键:防止重复 API 请求,修复竞态条件,并通过原子性占用和事务安全重试 POST。
修复服务端渲染应用中的 “window is not defined” 错误
通过挂载钩子、typeof window 检查和仅客户端导入,修复服务端渲染应用中的 window is not defined 错误。
面向 Web 开发者的提示注入(Prompt Injection)详解
面向Web开发者的提示词注入解析:为什么没有提示层修复,以及如何限制间接攻击、不可信输出和工具风险。
初探 Gea:一个编译器优先的 UI 框架
Gea 是一个以编译器为先的 JavaScript UI 框架,使用 JSX、类 store 和直接 DOM 补丁。文章分析其 props 模型、体积和成熟度。
从零开始编写 WordPress 插件
从零构建 WordPress 插件,涵盖钩子、启用和停用钩子、设置页、数据清理、转义以及安全保存。
如何修复 React 中的 Invalid Hook Call 错误
通过检查堆栈、Rules of Hooks、重复的 React 副本和 react-dom 版本不匹配,修复 React invalid hook call 错误。
在 AI 编码 Agent 中使用 Git Worktrees
使用 git worktrees 配合 AI 编码代理,隔离分支、避免文件冲突,并安全管理端口、数据库和合并。
Git Worktree 详解:何时使用、为何使用
解析 Git worktree:与 stash 和第二个克隆的区别、适用场景,以及管理它们的常用命令。
不稳定网络下的 3 种 SSH 替代方案
比较 Mosh、Eternal Terminal 和 autossh 处理不稳定 SSH 连接:UDP、TCP 重新连接、服务器需求以及 tmux 搭配。
如何统计 Token 数量并估算 LLM API 成本
使用 OpenAI、Claude、Gemini 和 Llama 的 tokenizer 精确计算 LLM token,并估算 API 成本、上下文窗口和计费。
ECMAScript 2026 新特性一览
ES2026 为 JavaScript 增加七项新功能:Array.fromAsync、Math.sumPrecise、Uint8Array 的 base64 和 hex 方法、JSON.parse 源文本访问,以及 getOrInsert。
如何检查 WCAG 的颜色对比度
了解如何用合适的工具和标准检查WCAG颜色对比度,涵盖文本、UI组件、焦点指示和链接。
如何在上传前生成图片缩略图
上传前创建图片缩略图:FileReader 预览、Canvas toBlob 缩放、FormData 上传和 multer 字段匹配。
VuePress 与 VitePress:该选哪一个?
VuePress 与 VitePress 的 Vue 文档对比:维护状态、开发速度、自定义能力,以及何时选择 VitePress 或 Docusaurus。
ORM 何时是错误的工具
当 ORM 成为瓶颈时,可用原生 SQL 处理 N+1 查询、窗口函数、CTE、批量写入和安全的参数化。
如何为 Vue 应用添加视频播放功能
为Vue应用添加视频播放:原生HTML5 video、可复用组件或Video.js,支持HLS、字幕、自动播放和清理。
超越 commit 和 push 的 5 个 Git 命令
超越 commit 和 push 的 5 个 Git 命令:stash、reflog、cherry-pick、rebase -i 和 bisect,用于恢复、整理历史和查找 bug。