1. 项目背景与核心需求
在当代快节奏生活中,情侣共同下厨正成为一种新兴的生活方式互动方式。我们团队在校园周边租房群体调研中发现:83%的情侣表示"想一起做饭但遇到食材管理混乱、菜谱选择困难、分工不明确"等实际问题。这个微信小程序正是为解决这些痛点而生。
不同于市面上单一的菜谱类应用,本系统创新性地整合了三大核心模块:
- 智能食材管理(支持拍照识别和手动录入)
- 双人协作菜谱系统(根据现有食材自动推荐)
- 厨房任务分配看板(实时同步进度)
去年在浙江大学城市学院的试点数据显示,使用该系统的情侣每周共同下厨次数平均提升2.4次,厨房争执减少67%。这个毕业设计项目之所以选择微信小程序平台,主要基于以下技术考量:
- 即用即走的特性符合厨房场景需求
- 原生API支持蓝牙连接厨房电子秤等设备
- 云开发模式可快速实现双端数据同步
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计解析
2.1 技术栈选型对比
我们放弃了uni-app跨平台方案而选择原生小程序开发,主要基于以下实测数据:
| 对比维度 | 原生小程序 | uni-app |
|---|---|---|
| 动画流畅度 | 60FPS | 45FPS |
| 冷启动时间 | 1.2s | 1.8s |
| 蓝牙设备兼容性 | 100% | 83% |
| 云开发支持度 | 完整 | 需插件 |
后端采用微信云开发+自建Node.js服务的混合架构:
- 用户基础数据、菜谱收藏等用云数据库
- 复杂的食材识别算法部署在自建服务
- 通过云函数进行服务间通信
2.2 核心数据结构设计
用户关系表采用双向链表结构解决情侣账号绑定问题:
javascript复制// users集合结构
{
_id: "user123",
partner: {
uid: "user456",
status: "confirmed" // pending/confirmed
},
kitchen: {
currentIngredients: [
{
name: "鸡蛋",
amount: "3个",
expire: "2023-12-31",
img: "cloud://ingredient-1a2b3c"
}
]
}
}
菜谱推荐算法融合了三种策略:
- 基于现有食材的精确匹配(权重60%)
- 根据用户历史偏好的协同过滤(权重30%)
- 时令季节的推荐加成(权重10%)
3. 关键功能实现细节
3.1 食材图像识别优化
针对厨房复杂环境,我们改进了标准的图像识别流程:
-
前置处理阶段:
- 使用微信的
wx.chooseImage获取图片 - 通过canvas进行高斯模糊降噪(半径5px)
- HSV色彩空间转换增强食材特征
- 使用微信的
-
识别服务部署:
- 在Node.js服务部署YOLOv5s模型
- 使用TensorFlow.js进行模型量化
- 将模型大小从189MB压缩到23MB
实测数据对比:
| 食材类型 | 原始准确率 | 优化后准确率 |
|---|---|---|
| 绿叶蔬菜 | 68% | 92% |
| 肉类 | 73% | 89% |
| 调味品 | 51% | 76% |
3.2 实时任务协同方案
采用发布-订阅模式实现任务状态同步:
javascript复制// 前端任务更新逻辑
Page({
onTaskUpdate(taskId, status) {
wx.cloud.callFunction({
name: 'updateTask',
data: { taskId, status }
})
this.getOpenerEventChannel().emit('taskUpdate', {
taskId,
status
})
}
})
// 云函数侧
exports.main = async (event, context) => {
const db = cloud.database()
await db.collection('tasks').doc(event.taskId)
.update({ data: { status: event.status } })
// 触发伴侣端更新
await cloud.openapi.subscribeMessage.send({
touser: partnerOpenId,
templateId: 'TASK_UPDATE_TEMPLATE',
data: {
thing1: { value: '任务状态变更' },
thing2: { value: event.status }
}
})
}
4. 开发中的典型问题与解决方案
4.1 小程序包体积超标问题
初始版本包大小达到3.2MB(超过2MB限制),通过以下措施优化:
-
静态资源处理:
- 将本地图片转为CDN引用(减少1.1MB)
- 使用SVG格式替代PNG(减少430KB)
- 启用微信的图片压缩API
-
代码优化:
- 按需引入Vant组件(减少280KB)
- 移除未使用的util函数(减少150KB)
- 启用分包加载策略
最终包体积控制在1.7MB,加载时间从4.3s降至2.1s。
4.2 双端数据一致性挑战
在任务分配场景下,我们遇到的最大难题是网络抖动导致的双端状态不一致。最终采用的解决方案是:
- 前端维护本地缓存队列
- 采用乐观更新策略(先更新UI再同步服务端)
- 冲突解决机制:
- 时间戳优先(最后修改者胜出)
- 关键操作需二次确认
- 状态回滚提示
javascript复制// 冲突检测代码示例
function handleConflict(local, remote) {
const TIMESTAMP_THRESHOLD = 3000 // 3秒内视为同时修改
if (Math.abs(local.time - remote.time) < TIMESTAMP_THRESHOLD) {
wx.showModal({
title: '操作冲突',
content: '伴侣同时修改了该任务',
complete: (res) => {
if (res.confirm) {
// 采用当前用户操作
}
}
})
} else {
// 采用时间靠后的修改
return local.time > remote.time ? local : remote
}
}
5. 毕业设计扩展建议
在基础功能之外,可以考虑以下加分项实现:
-
智能购物清单生成
- 分析常用菜谱的食材组合
- 对接超市API比价
- 生成最优采购路线
-
厨艺成长体系
- 记录菜品制作次数
- 设置成就系统
- 生成年度厨艺报告
-
设备互联方案
- 蓝牙连接智能厨具
- 语音控制集成
- 烹饪过程监控
对于论文写作,建议重点突出以下创新点:
- 双人协作的交互设计模式
- 厨房场景下的图像识别优化
- 轻量级实时同步方案
- 情感化设计元素(如完成任务的爱心动画)
项目源码中特别需要注意的文档规范:
- 所有云函数需包含JSDoc注释
- 页面组件按
[功能]-[类型]格式命名 - 重要算法需添加流程图说明
- 数据库设计要有ER图
