
1 FYK 2018-05-14 16:12:43 +08:00 ...所以我从你的描述中没有明确感受到是 php 成为了瓶颈。 |
2 widdy 2018-05-14 16:12:49 +08:00 先使用回复接口回复个稍等,然后使用客服接口发海报回去! |
3 c466934322 OP @FYK 我标题的意思是说我用了 php 这个语言的技术,并不是说 php 成为了瓶颈,不要断章取义。我写 php 的目的是希望对 php 感兴趣的人才帮忙解答一下。 |
4 1010011010 2018-05-14 16:23:27 +08:00 我记得 gd 库某些功能很慢 可能是处理图片占大头 |
5 lookwi 2018-05-14 16:24:24 +08:00 via iPhone 换图片处理 imagick |
6 DonaidTrump 2018-05-14 16:24:47 +08:00 via iPhone 上 php7.2 啊 |
7 c466934322 OP @FYK 我这种渣渣水平真的不敢说那个语言有瓶颈,只能说我还在努力想说这句话中。谢谢 |
8 ibaoka 2018-05-14 16:30:29 +08:00 速度慢的瓶颈也许是在获取微信头像上,不要用 file_get_content,用 curl,会有惊喜。 |
9 zhouxuchen 2018-05-14 16:30:39 +08:00 一个曲线救国的方案,如果背景图是固定的,可以用第三方对象存储的水印接口完成。这样只要生成二维码后上传到 CDN,把带着打水印参数的背景图地址直接返回给前端就行了。 |
10 KIDJourney 2018-05-14 16:30:42 +08:00 说了这么多你还是不知道慢在哪,多打点 metrics。看一下瓶颈在哪。 |
11 kslr 2018-05-14 16:35:35 +08:00 拼图还是要自己写,我之前做过和你的业务一样,基本卡在拼图。 |
12 kslr 2018-05-14 16:36:24 +08:00 不过,如果你只有一张拼图的话,还是打点吧 不可能这么慢的,网络 IOCPU 看看是哪一个。 |
13 simapple 2018-05-14 16:38:34 +08:00 异步操作了吗? |
14 learnshare 2018-05-14 16:43:54 +08:00 via Android 之前做的方案是写成页面,用 headless 浏览器截图,这样生成的图像更加细致可控 |
15 h1367500190 2018-05-14 17:01:37 +08:00 是实话到底是哪一步慢啊,看得我急死了 |
16 tanszhe 2018-05-14 17:12:23 +08:00 |
17 w516322644 2018-05-14 17:57:14 +08:00 这个查下慢的原因在哪, 我查过是用 file_get_contents 获得微信图片很慢,用 curl 获得就很快。 |
18 dilu 2018-05-14 18:09:17 +08:00 先分析 MySQL 慢查询日志,看看是不是数据库出现了瓶颈,在看 PHP-FPM 的慢日志,看是不是脚本出了问题,最后看 Nginx 日志,再判断是不是网络延迟的问题,总要先确定问题出在哪才能动手去解决 还有,只要你把 PHP 从 5 换成 7,就能获得最少 30%性能的提升 |
19 FYK 2018-05-14 20:38:19 +08:00 @c466934322 不好意思,可能让你产生了误会。我的本意是同: #10 #15 #17 #18 他们的说法。 你遇到了这个问题,但是完全没有相应有用的错误提示之类的信息。我说的错误提示,如 #18 所述类似,你是否自己对这相关对方面进行了分析了?如果有更多的信息,可以帮助大家更有方向性地对你对这个问题进行分析。 除了以上的解释,我说明一下我为什么会留下这个评论 :「...所以我从你的描述中没有明确感受到是 php 成为了瓶颈。」: 你的标题是 「使用 PHP 生成微信海报速度过慢」。那当我看到标题的时候,我觉得是和 PHP 强相关的,是由 PHP 导致的。当我进来的时候,我潜意识的应该是觉得可能会获得这样的信息:「你通过别的语言或者其他什么方式进行了这种操作都没有问题,但是现在由于某种原因,你要用 PHP,而 PHP 得到的结果并不理想」。实际我看到的是: 1. 你描述了一下你的程序逻辑 2. 配上了服务器的配置 3. 最后提出了具体的问题。 我个人感觉从你的帖子内容中,感受到的是和 PHP 没有那么强相关的。就你的内容而言,网络,数据库或其他方面都可能产生问题。而你并没有说你定位到问题是在哪里,另外我认为从你的描述中,也可能存在问题并不出在 PHP 的情况。 我觉得以上对你在 #3 的回复是有足够程度的解释的。 另外,对你 #7 的回复 「我这种渣渣水平真的不敢说那个语言有瓶颈,只能说我还在努力想说这句话中。谢谢」。 对该回复,我理解为「你觉得你的 PHP 水平没有达到你自觉可以满意的某种程度」,嗯,我也这么评价自己。「不敢说那个语言有瓶颈」,这个吧,我觉得每种语言都不是万能,都有擅长做的方面,以及可以做但是不擅长的方面,「敢不敢说」就是你对该种语言对认知程度,比如即使我对某种语言没有深入学习,但是我有了解过它的擅长和不擅长的地方,那么在评论像你这个帖子的这种情况的时候,我觉得我是可以说 「这种语言在某些方面有局限性,而在这种局限下进行开发,这种语言可能就会成为程序的瓶颈」。 希望你不嫌弃我这冗长的回复。 在此,再次对让你产生误解表示歉意。 |
20 eve1yb0dy 2018-05-14 20:54:54 +08:00 打 log 看哪里慢... |
21 flyingghost 2018-05-15 11:20:18 +08:00 1234 里都没看出有什么动态内容。 那就为每个用户提前生成啊。 |
22 moonsola 2018-05-15 11:28:07 +08:00 进来之前,以为是 php 合成图片慢; 进来之后,发现楼主还没定位到具体是哪里慢 |
23 vlrog 2018-05-15 13:49:46 +08:00 应该不是 PHP 的问题,很可能是获取微信二维码和调用客服接口比较费时 |
24 simapple 2018-05-15 14:38:00 +08:00 @tanszhe 看清楚,他要做的这些都可以异步实现。 @c466934322 用 swoole 将这个任务拆分成异步的,然后返回 success 给微信,生成好图片上传后,用客服接口推给微信。使用 cgi 进程同步执行 只要用户集中操作就会阻塞,微信在服务器返回超时,还会执行重试,让进程更加忙碌。所以你把这个处理操作 都弄成异步的,就 ok 了 |
25 han8gui 2018-06-08 17:29:54 +08:00 之前做过类似的功能,1s 之类就搞定了。 没看出你的瓶颈在哪? |
26 Rootrl 2018-08-01 01:01:32 +08:00 最后放在客户端生成,canvas |