您的位置:时间博客>PHP>我用 Hyperf + uni-app 做了一个背单词小程序,聊聊踩过的坑和一些架构取舍

我用 Hyperf + uni-app 做了一个背单词小程序,聊聊踩过的坑和一些架构取舍

前段时间上线了一个英语词汇学习小程序「优词记 Pro」,从后端到小程序到管理后台都是自己一套撸下来的。趁着刚上线,把整个项目的技术选型和几个有意思的设计记录一下,供同样在做全栈小项目的朋友参考。

整体架构

项目分三块:

  • 后端:Hyperf 3.1 + Swoole(PHP 8.3),MySQL + Redis

  • 小程序端:uni-app 3.x + Vue 3 + Vite + Pinia,编译到微信小程序

  • 管理后台:Vue 3 + Element Plus

产品功能不复杂但很聚焦:按教材同步背单词,提供拼写、中文选词、英文选义等多种练习模式,配合打卡统计、学习日历、收藏复习这些轻激励机制。没有做社区、商城之类的功能堆砌,就是一个纯粹的学习工具。

后端:为什么选 Hyperf

PHP 写业务快,但传统 FPM 模式在长连接和高并发场景下比较吃力。Hyperf 基于 Swoole 协程,常驻内存 + 连接池,对这种查询密集型的学习类应用来说,响应速度和资源占用都比 FPM 好一个量级,而开发体验又保留了 PHP 的顺手。

几个自己比较满意的设计:

  1. 数据库优先的代码生成。 没有用 migration,数据库 schema 是唯一真相源。写了一个 entity 命令读取 information_schema,自动生成 Entity(列常量、验证规则、关系声明)和 Model 文件。表结构变了跑一遍命令,代码就同步了,字段常量化之后 IDE 提示和静态分析(phpstan)都能覆盖到。

  2. 自定义路由调度器。 全站只有一条通配路由,由 Dispatcher 按约定分发:URL 前缀区分端(/admin、/user、/common),HTTP 方法映射到方法前缀(GET → get*,POST → create*)。新增接口不用注册路由,按目录结构放好文件即可。约定优于配置在小团队里确实省心。

  3. 分层强约束。 Controller → Service → Manager → Model → Entity 五层,每层职责单一。配合注解式的权限控制(#[Permission])和操作日志(#[OperationLog]),后台的 RBAC 和审计基本零侵入。

小程序端:uni-app 的工程化

uni-app 被吐槽多,但对个人项目来说「一套代码多端可跑」依然真香。我把代码分了三层:framework/(跨项目复用的基础层)、shared/(http、store、hooks、公共组件)、pages/(业务页面),基础层可以直接搬到下一个项目。

HTTP 层没有直接裸用 uni.request,而是封装了一个带拦截器链(Auth → Log → Response)的 HttpClient,401/402 自动登出、错误统一弹窗,业务代码里几乎见不到错误处理的样板代码。

一个实测踩坑:HBuilderX 的「发行」构建会和 node_modules 里的本地编译器混用,导致 easycom 组件被静默丢弃、样式错乱——最后统一走 npm 脚本构建才解决。如果你也是 HBuilderX 目录结构 + CLI 混合开发,建议构建链路只保留一条。

一些取舍

  • 文件上传走腾讯 COS + 后端 STS 临时凭证,客户端直传,不占服务器带宽

  • JWT 多 Guard:管理端 7 天、小程序端 365 天,学习类工具用户不该频繁被登出

  • 移动端所有列表统一 simplePage 模式,只关心「有没有下一页」,省掉 count 查询

最后

产品还很早期,接下来计划基于学习日志做记忆曲线相关的复习推荐。如果你正好在学英语背单词,可以在微信里搜「优词记 Pro」体验一下,也欢迎从产品或技术角度提意见——评论区聊聊你觉得背单词工具最缺什么功能?如果对 Hyperf 协程化实践或 uni-app 工程化的细节感兴趣,也可以留言,后面可以单独写一篇展开。

转载请注明本文标题和链接:《 我用 Hyperf + uni-app 做了一个背单词小程序,聊聊踩过的坑和一些架构取舍

相关推荐

网友评论 0

未登陆 表情
Ctrl+Enter快速提交