一、收藏功能核心设计
1. 数据模型设计
- 用户收藏表(user_favorites):
```sql
CREATE TABLE `user_favorites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(32) NOT NULL COMMENT 用户ID,
`goods_id` varchar(32) NOT NULL COMMENT 商品ID,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 收藏时间,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_goods` (`user_id`,`goods_id`) COMMENT 用户-商品唯一索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
2. API接口规范
- 收藏/取消收藏接口:
```javascript
// 请求示例
POST /api/favorite/toggle
{
"user_id": "u1001",
"goods_id": "g2023001",
"action": "add" // 或 "remove"
}
// 响应示例
{
"code": 200,
"message": "收藏成功",
"data": {
"is_favorited": true
}
}
```
3. 前端交互优化
- 商品列表页:添加空心/实心星星图标
- 商品详情页:顶部悬浮收藏按钮
- 个人中心:独立收藏列表页(带分类筛选)
二、万象源码部署方案
1. 环境准备
- 服务器要求:
- 最低配置:1核2G(推荐2核4G)
- 操作系统:CentOS 7.6+
- 依赖环境:
```bash
yum install -y nginx mysql redis nodejs
npm install -g pm2
```
2. 源码部署流程
```bash
1. 克隆源码(示例)
git clone https://github.com/wanxiang-team/mini-program-backend.git
cd mini-program-backend
2. 配置修改
cp config/default.json config/production.json
vi config/production.json
修改数据库连接、JWT密钥等配置
3. 依赖安装
npm install
4. 数据库初始化
mysql -u root -p < sql/init.sql
5. 启动服务
pm2 start ecosystem.config.js --env production
```
3. 小程序端集成
- 在`app.js`中初始化收藏状态:
```javascript
App({
onLaunch() {
this.checkFavorites();
},
checkFavorites() {
wx.getStorage({
key: favorites,
success: (res) => {
this.globalData.favorites = new Set(res.data);
}
});
}
});
```
三、关键优化点
1. 性能优化
- 本地缓存:使用`wx.setStorageSync`缓存收藏状态
- 批量操作:支持多商品批量收藏/取消
- 防抖处理:500ms内重复操作只执行一次
2. 用户体验
- 收藏动画:添加缩放+透明度变化效果
- 实时反馈:操作后立即更新UI,无需等待接口响应
- 空状态引导:收藏列表为空时显示推荐商品
3. 数据安全
- 接口鉴权:所有收藏接口需携带有效token
- 频率限制:单用户每分钟最多操作30次
- 数据加密:敏感字段使用AES加密
四、部署后测试要点
1. 功能测试
- 正常收藏/取消流程
- 匿名用户访问限制
- 跨设备数据同步
2. 压力测试
- 模拟1000用户同时操作
- 平均响应时间应<200ms
- 错误率<0.1%
3. 兼容性测试
- 主流手机型号(华为/小米/OPPO等)
- 微信基础库2.14.0+版本
- iOS/Android双平台
五、推荐技术栈
| 组件 | 推荐方案 |
|-------------|-----------------------------------|
| 后端框架 | Express.js + TypeScript |
| 数据库 | MySQL 8.0(主从复制) |
| 缓存 | Redis(收藏状态缓存) |
| 部署方式 | Docker容器化部署 |
| 监控系统 | Prometheus + Grafana |
六、常见问题解决方案
1. 收藏状态不同步
- 解决方案:实现WebSocket实时推送或轮询机制
2. 高并发下数据冲突
- 解决方案:使用Redis分布式锁
```javascript
async function addFavorite(userId, goodsId) {
const lockKey = `lock:favorite:${userId}:${goodsId}`;
const lock = await redis.lock(lockKey, 1000);
try {
// 业务逻辑
} finally {
await lock.release();
}
}
```
3. 数据迁移问题
- 解决方案:提供Excel导入/导出工具
建议部署后进行灰度发布,先开放10%流量进行验证,逐步扩大至全量用户。同时建立完善的监控体系,实时跟踪收藏功能的调用量、成功率等关键指标。