154 lines
7.0 KiB
Markdown
154 lines
7.0 KiB
Markdown
# Doodle Mini v3.5 Web 与服务端生成策略
|
||
|
||
> 状态:迁移到自有云服务器的方向已确认;Web 与绘图试点待实施
|
||
>
|
||
> 更新日期:2026-10-12
|
||
|
||
> 现有业务后端的迁移范围、切换顺序和验收以[云服务端迁移方案(doodle-store)](../../../doodle-store/docs/云服务端迁移方案.md)为准。本文说明迁移后 Web 与服务端生成的演进,不再以继续保留 CloudBase 业务后端为目标。
|
||
|
||
## 1. 决策结论
|
||
|
||
### 1.1 Web 的定位
|
||
|
||
Web 是长期的搜索获客、内容沉淀、电脑打印和教师/机构扩展渠道;小程序仍是当前的微信内打开、分享、每日推荐和家庭留存主产品。
|
||
|
||
v3.5 将现有业务后端迁移作为独立实施任务,小程序体验和小规模 Web/服务端生成按里程碑推进,不预设固定投入比例。
|
||
|
||
不等待小程序“达到很大用户量”才准备 Web,因为搜索内容、服务端渲染和内容生产机制都需要时间积累;但也不在内容库、内容生产和核心留存未验证时建设完整 Web 平台。
|
||
|
||
### 1.2 生成位置
|
||
|
||
未来 Web 的高价值题型采用**服务端生成与渲染优先**。浏览器负责选择参数、展示预览、发起下载和账户交互;不得承载完整题目生成规则、排版参数与私有素材。
|
||
|
||
小程序既有题型暂可保留客户端 Canvas 生成,以避免高风险的一次性重写。创意涂色纸及后续主题包、批量 PDF 等新能力必须按服务端模式实现。
|
||
|
||
## 2. 为什么不把核心生成放在 Web 客户端
|
||
|
||
Web 客户端代码、网络请求和静态资源可被用户查看、保存和分析。即使经过压缩或混淆,也只能提高复制成本,无法提供真正的保护。
|
||
|
||
服务端模式保护的是:
|
||
|
||
- 题目随机规则、难度控制、答案逻辑。
|
||
- 模板坐标、排版参数和批量内容生产能力。
|
||
- 原始 SVG/高清线稿、字体、商用素材以及素材关联关系。
|
||
- 未发布题型、主题包和会员规则。
|
||
|
||
服务端无法阻止他人观察最终 PNG/PDF 并模仿视觉效果;产品壁垒仍来自稳定的内容供给、素材版权、生成质量、运营数据和用户体验。
|
||
|
||
## 3. 目标架构
|
||
|
||
```text
|
||
小程序 / Web
|
||
└─ 仅提交受控参数:worksheetId、年龄、难度、主题、孩子姓名
|
||
↓
|
||
统一业务 API
|
||
↓
|
||
Render API(鉴权、配额、限流、参数校验)
|
||
↓
|
||
私有题型配置 + 私有素材 + 生成器 + 渲染器
|
||
↓
|
||
生成 PNG / PDF,写入对象存储
|
||
↓
|
||
返回短期签名预览/下载 URL 或异步任务状态
|
||
```
|
||
|
||
示例请求:
|
||
|
||
```json
|
||
{
|
||
"worksheetId": "coloring-animal-01",
|
||
"variant": "easy",
|
||
"childProfileId": "child_123",
|
||
"output": "png"
|
||
}
|
||
```
|
||
|
||
服务端根据 `worksheetId` 查询内部配置,生成随机种子和题目内容;客户端不能传素材 URL、任意渲染器名称、自由模板参数或数据库字段。
|
||
|
||
## 4. 数据与接口边界
|
||
|
||
### 4.1 平台无关的 worksheet 模型
|
||
|
||
当前内容数据中存在小程序专用 `path`,例如 `/mathPages/mathDraw/mathDraw?id=number-find`。v3.5 起应建立平台无关的核心字段:
|
||
|
||
```ts
|
||
type Worksheet = {
|
||
id: string;
|
||
category: string;
|
||
title: string;
|
||
ageMin: number;
|
||
ageMax: number;
|
||
difficulty: 1 | 2 | 3 | 4;
|
||
tags: string[];
|
||
rendererKey: string; // 仅服务端可解释
|
||
generatorKey: string; // 仅服务端可解释
|
||
assetRefs: string[]; // 私有资源引用
|
||
status: 'draft' | 'active' | 'hidden';
|
||
};
|
||
```
|
||
|
||
小程序路由与 Web URL 是展示层映射,不能作为内容本体。旧字段可在迁移期保留为 `miniProgramPath`,但新服务端生成不依赖它。
|
||
|
||
### 4.2 业务服务接口
|
||
|
||
页面不得再散落调用 `wx.cloud.callFunction`。逐步收口为业务接口:
|
||
|
||
```ts
|
||
worksheetService.list(filters)
|
||
worksheetService.getDetail(id)
|
||
renderService.createJob(request)
|
||
renderService.getJob(jobId)
|
||
favoriteService.toggle(worksheetId)
|
||
historyService.list()
|
||
```
|
||
|
||
新版小程序与后续 Web 统一使用 HTTP 业务 API;旧版云函数只在过渡期转发同一业务实现。上层页面不感知数据库与文件存储实现。
|
||
|
||
## 5. 后端演进路径
|
||
|
||
### 阶段 A:现有业务后端迁移
|
||
|
||
- 按专项方案迁移现有云函数、数据库、文件和定时任务到自有腾讯云服务器 + MySQL + 七牛。
|
||
- 新版小程序经业务服务层调用统一 HTTP API;短期兼容桥照顾旧正式版本,只有一个业务写入源。
|
||
- 先保持现有生成与保存行为,再验收数据关联、文件、计数和切换;不同时重写所有绘图代码。
|
||
|
||
### 阶段 B:服务端生成样板
|
||
|
||
- 在同一后端增加受控 Render API,以创意涂色或一个简单现有题型验证生成、字体、延迟和文件交付。
|
||
- 原始素材和模板采用私有存储;最终文件通过受控地址交付,不依赖隐藏对象路径保护素材。
|
||
- 根据实际任务量增加缓存/异步处理,不预先搭建独立队列平台。
|
||
|
||
### 阶段 C:Web 小规模试点与扩张
|
||
|
||
- Web 复用统一 API 和内容源,内容页面使用适当的预生成或服务端渲染,生成规则留在服务器。
|
||
- 只建设下节规定的 MVP;旧题型按价值与实际适配成本逐步接入,批量 PDF/会员另行评估。
|
||
- 私有生成进程可按资源需求拆分,但不另建用户、收藏、内容数据库或第二套业务规则。
|
||
|
||
## 6. 安全、成本与体验基线
|
||
|
||
| 维度 | v3.5 最低要求 |
|
||
| --- | --- |
|
||
| 素材保护 | 原始素材不公开;仅输出最终位图/PDF;下载链接短时有效 |
|
||
| 接口控制 | 登录/游客策略、参数白名单、按用户/IP 限流、每日生成配额 |
|
||
| 缓存 | 以题型、变体、随机种子、个性化字段计算缓存键;个性化内容谨慎缓存 |
|
||
| 任务模式 | 单张同步生成;多页学习包/PDF 使用异步任务与状态查询 |
|
||
| 可观测性 | 记录生成耗时、失败原因、缓存命中、文件大小、单位成本 |
|
||
| 体验目标 | 单张预览 P95 小于 3 秒;异步任务需有明确进度和失败重试提示 |
|
||
|
||
## 7. Web MVP 范围与升级门槛
|
||
|
||
Web MVP 仅包含:首页、10–20 个高意图主题/详情页、2–3 类生成器、预览与打印/PDF 下载。首选试点为创意涂色纸。
|
||
|
||
满足以下条件后,才扩张为完整 Kiddoleap 风格的资源平台:
|
||
|
||
- 可稳定按周上新内容,并有明确的素材/审核/发布流程。
|
||
- Web 已获得自然搜索访问、有效下载与回访,不只是小程序导流。
|
||
- 生成服务的时延、成功率和成本达到产品目标。
|
||
- 主题包或批量导出表现出明确的付费/订阅意愿。
|
||
|
||
## 8. 与既有文档的关系
|
||
|
||
本策略更新了既有架构文档中“前端为主、核心生成保持客户端执行”的长期方向:该原则仍适用于存量小程序题型的成本与离线体验,但**不适用于未来 Web 的高价值题型**。
|
||
|
||
在 v3.5 评审通过后,应同步更新《技术架构设计文档》《PC-Web端技术预案》《小程序云开发方案和数据库设计》中的阶段说明,避免文档之间出现相反结论。
|