本人是一个小白开发。。。
是这样一个 Flask 接口。
首先获取微信 access_toekn。
接下来请求获取微信带参数的小程序码。
最后从本地读取一系列图片文字之类的静态文件将这些东西合在一张新的图片上(用的 pillow,裁剪、翻转、把图片弄成圆的之类就这些操作)。
这个接口相应时间基本在 5-8s 之间,老大说不行太慢了,怎么优化一下。
我试了下,貌似耗时主要在两个图片流的传输过程上?
有没有比较好的办法呀?求助
1
luozic Oct 16, 2018 via iPhone
先通过 profile 把瓶颈找到,你这说得好像? 确定了才好动手优化
|
2
opengps Oct 16, 2018 via Android
我有个笨办法,就是在后台代码不同位置打时间日志,记录当前时间,然后不断调整打日志代码位置,把最费时间的那一段代码找出来
|
5
donething Oct 17, 2018
换个语言能快不少吧。。比如 go
|
6
xuanbg Oct 17, 2018
如果图片不用马上展示的话,可以异步生成图片
|
7
owenliang Oct 17, 2018 via Android
本地文件能花 5 秒吗。。。
|
9
w516322644 Oct 17, 2018
感觉是获得那个微信的小程序码吧,模拟浏览器去下载它。
|
10
guiling Oct 17, 2018
是类似制作带二维码的分享卡的功能么,一般做法是后台获取小程序码,保存在服务器,返回前端网络路径,然后前端 canvas 绘制渲染海报样式保存图片。后台一般不做图片处理的,简单的裁切缩放可以交给前端,还能转移服务器压力,我做的小程序都是这样,具体耗时看各个手机性能,但一般都是 2~3s,好点的手机整个过程 1s
|
11
guiling Oct 17, 2018
要是给后台处理的话,同时又 100 个处理请求估计就 gg 了
|
13
leafiy Oct 17, 2018
这种需求必定用 canvas 做啊,犹豫什么
适配问题,如果前端不支持再出个 loader 交给后端,再说了现在还有不支持 canvas 的??? |
14
leafiy Oct 17, 2018
|
15
Molita OP @luozic
从 profiler 看还是慢在网络请求和生成图片那了 Total time: 0.691589 s File: upvote_func/upvote_func.py Function: generate_upvote_share_image at line 90 Line # Hits Time Per Hit % Time Line Contents ============================================================== 90 @func_line_time 91 def generate_upvote_share_image(organizer_id): 92 1 1509.0 1509.0 0.2 user_info = get_user_info(int(organizer_id), ["user_avatar"]) 93 1 1.0 1.0 0.0 if not user_info: 94 return 95 1 1.0 1.0 0.0 user_avatar_link = user_info.get("user_avatar") 96 1 0.0 0.0 0.0 if not user_avatar_link: 97 return 98 1 4.0 4.0 0.0 scene = UPVOTE_SHARE_IMAGE_SCENE.format(organizer_id) 99 1 0.0 0.0 0.0 mini_program_code_image_io = get_mini_program_code( 100 1 374455.0 374455.0 54.1 UPVOTE_SHARE_IMAGE_PATH, scene) 101 1 4.0 4.0 0.0 if not mini_program_code_image_io: 102 return 103 1 315615.0 315615.0 45.6 return generate_image(user_avatar_link, mini_program_code_image_io) |
16
MaZiT Oct 17, 2018
html2canvas 了解一下?
|
18
Molita OP 那就和老板反映下吧。。转移到前端做
|
19
zhangwugui Oct 17, 2018
你这是是朋友圈分享图之类的吧。
生成小程序码这个接口会慢一点,合成图片这个接口会慢一点,这两个地方有影响; 我只做过后台的,幸亏量不大,要不然服务器根本顶不住。 还是前台来做吧。 |
20
zhangwugui Oct 17, 2018
不过一般 2-3 秒吧,生成小程序码 1.5s ,合成图片 1.5s.另外小程序码后台存表里,不用每次都请求微信接口。
|
21
zhangwugui Oct 17, 2018
合成的图片也可以存表里,或者做缓存,我们是存表里的,因为图片上的内容不是经常发生改变的。
|
22
tao1991123 Oct 17, 2018
@Molita #12 你们前端太水了 canvas 哪来的兼容性问题
|
23
kslr Oct 17, 2018
不谈前后端,只是图片拼接,速度有点慢了。
|
24
lihongjie0209 Oct 17, 2018
@donething 你把 python 的性能压榨完了就换语言? 不懂的人哪怕换汇编还是一个样
|