技术博客文章

Vue 3 表单验证进阶:用 vee-validate + yup 接管复杂联动校验

手写校验的代价 表单一多,手动 v-model 加 if 判断既啰嗦又难维护,尤其是"两次密码一致""选了 A 才必填 B"这类联动规则。vee-validate 负责绑定与错误展示,yup 负责描述校验规则,两者配合能把校验逻辑从模板里彻...

技术test12026-10-0213

Rust 单元测试与基准测试:用 cargo test + criterion 把性能说清楚

测试是 Rust 的一等公民 Rust 的测试无需额外框架,标准库自带 #[test] 与 assert_eq!。跑 cargo test 即可执行全部测试。当性能敏感时,再用 criterion 做基准测试,量化"改了这段之后到底快了多少...

技术test12026-10-028

React 主题切换与暗色模式:用 CSS 变量 + Context 把主题做成一等公民

为什么主题不该写死在组件里 很多项目把颜色直接写进组件样式,做到一半要加暗色模式,只能全局搜索替换,还容易漏。更稳的做法是把所有颜色收敛到 CSS 变量,组件只消费变量;主题切换只是切换 :root 上的一组变量。React 负责把当前主题...

技术test12026-10-027

Laravel 文件上传与 Storage 抽象:从本地磁盘平滑切到阿里云 OSS

别把存储写死在业务里 文件上传最怕的是业务代码里直接拼本地路径。一旦要上对象存储,得改无数处。Laravel 的 Storage 门面把所有磁盘统一成一套 put/get/url 接口,本地、S3、阿里云 OSS 只是换一个 disk 配置...

技术test12026-10-0212

Go 分布式锁与缓存击穿防护:用 go-redis + redsync 把并发收住

单机的锁不够用 当服务横向扩容到多个实例,进程内的 sync.Mutex 只能锁住自己这一个节点。需要跨进程互斥时,Redis 是常见选择。redsync 在 Redis 上实现了 Redlock 思路:用一个带过期时间、带随机值的 key...

技术test12026-10-028

Vue 3 组件测试实战:用 Vitest 与 @vue/test-utils 验证交互与逻辑

为什么给组件写测试 组件测试介于单元测试和端到端测试之间:它不依赖真实浏览器,只渲染单个组件并验证交互、props、emit 和渲染结果。相比 E2E 更快更稳,相比纯函数测试更贴近真实使用。 搭建测试环境 Vue 3 生态首选 Vite...

技术test12026-09-3017

Rust 异步 HTTP 实战:用 reqwest 与 tokio 并发抓取多个接口

为什么用 reqwest Rust 里做 HTTP 客户端,reqwest 是事实标准:它基于 tokio 异步运行时,API 简洁,支持 JSON、超时、拦截器。配合 futures 的 join_all,可以轻松把多个独立请求并发发出去...

技术test12026-09-3011

React 代码分割实战:用 React.lazy 与 Vite manualChunks 把首屏包拆薄

为什么需要代码分割 单页应用打包后往往是一个巨大的 JS 文件,用户首屏就要下载全部代码,即使很多路由暂时用不到。代码分割(code splitting)把不同路由、不同第三方库拆成独立的 chunk,浏览器按需加载,首屏体积和解析时间都能...

技术test12026-09-3010

Laravel 授权实战:用 Policy 与 Gate 把权限判断收口到一处

为什么要把授权收口 权限判断如果散落在控制器、模板、服务里,规则一变就要到处改,还容易漏。Laravel 提供 Gate 和 Policy 两套机制,把「当前用户能不能做这件事」集中定义,调用方只管问一句 authorize,通过才继续,否...

技术test12026-09-309

Go 结构化日志实战:用标准库 slog 输出可检索、可分级的日志

为什么放弃 fmt.Println 开发期用 fmt.Println 调试很顺手,但到了生产环境,散落各处的字符串日志既不便检索,也难区分级别。Go 1.21 起标准库自带 slog,用键值对输出结构化日志,配合 JSON handler ...

技术test12026-09-309