@
AquanllR 后端结果统一且稳定,而且生成海报这个业务并发量也不大...
@
Exia 前端其实不可控因素太多,特别是多端环境下的开发...哪怕只是 H5,不同内核呈现出的效果都有一定差异。
@
stevenkang 想多了,后端处理基本都是跑 CPU 资源,占用的大户是 CPU>带宽>内存。
其实结合上面所有的观点,都是建议 前端生成,理由是节省资源和带宽。
这点我同意,但我也给我之前项目经验给你参考:
业务 1:生成业务员名片,格式固定,获取头像、姓名、部门、二维码,复制到模板对应位置即可。
方案:PC 前端生成名片
坑:浏览器分辨率,浏览器缩放,屏幕大小(有些用 PC,有些用手机)
处理结果:被人 @了 2 周,终于稳定了;其中缩放功能导致的异常没法解决,只能建议他们别缩放。
业务 2:客户手机端产品海报生成,产品图为主图,背景为产品图+300 像素,左边放产品名称和推荐人头像姓名,又边放产品链接二维码;
方案 1:前端生成
坑:产品名称过长,昵称含有特殊字符的,直接 GG 了,多端( h5,微信小程序,抖音小程序)展示的效果不一致,其中印象最深的是微信小程序 IPHONE7 机型,完全走样。基本功能上线后天天被人 @ 。
方案 2:后端生成
坑:由于后续海报图增加了价格显示,但是产品价格会改变,当初做缓存的时候没考虑到这个因素,导致某天突然被 @说海报的价格不一致......。
处理结果:把用户昵称 + 产品 ID + 产品价格 做个 MD5,请求是判断是否存在,存在就直接返回,不存在就走生成逻辑。
---至今稳定,也没出现 CPU 毛刺之类,后续还加入了 QRCODE 查找替换的功能....
后来也有过小坑,带宽偶尔出现毛刺,查监控找不到规律。
某来突然发现是用户下载海报时候导致的。因为部分图片大小逼近 4~5MB 。(产品主图有做 CDN 缓存,但是生成的海报没做缓存)
解决方法:用户->CDN->COS->源;
结合上面自身案例,结论:
后端生成
优点:稳定,生成结果统一、后期海报需求变复杂的情况下也能支撑。
缺点是:
1 、原图过大的话海报会影响带宽----通过 CDN 解决
2 、防止 CPU 瞬间飙升---通过判断文件是否已经生成(缓存),要求再高的话可以单独一个服务出来。
前端生成
优点:节省计算资源、带宽;
缺点:不同终端不同内核结果不一,无法支撑复杂业务;
BTW:
如果你把标题改为 “后端处理海报 AND 二维码 的能力 和前端处理的能力对比”,估计你会得到不一样的结果。