关于 Laravel 应用性能优化的几点建议

2020-10-11 00:02:59 +08:00
 nonfu

具体优化方案请阅读这篇文章:https://xueyuanjun.com/post/22069

仅仅是对 Laravel 应用性能优化的一家之言而已,如果你有更好的建议,欢迎一起交流。

请不要在评论区引入框架语言之争,很烦这个,有一条删一条,谢谢。

3797 次点击
所在节点    PHP
11 条回复
ywisax
2020-10-11 00:35:02 +08:00
看终端的样式,应该是本地压远程。。。这样得来的压测结果都是错的。
nonfu
2020-10-11 01:10:08 +08:00
@ywisax 远程测试结果也是一样的
nonfu
2020-10-11 01:19:28 +08:00
@ywisax 因为不存在带宽的问题 本身远程带宽很小
nonfu
2020-10-11 01:44:17 +08:00
@ywisax 至于百度确实存在这个问题 这种集群部署的服务最好在其内网某台机器测试 所以仅做同等压测条件下的一个参考 同等条件的同行网站也不便拿来参考 有诋毁嫌疑 感谢您的指正
dvaknheo
2020-10-11 14:22:18 +08:00
使用 CDN 访问静态资源(图片、JS 、CSS 文件)减轻带宽负载;
// 这个是 web 后端通用的优化。
服务器启用 PHP OPcache 扩展缓存 PHP 字节码;
// 还好,没碰见过 OPcache 的 bug 。

对于所有高频业务 SQL 查询,合理优化索引字段,提升数据库查询性能;

// [ 这项很重要。ORM 导致 SQL 不直观,所以懂 ORM 不懂 SQL 不行,你需要在写 ORM 的时候大致估摸着会生成什么 sql 。 我还见过后期加东西因为之前写的太复杂看不懂,直接在最前面加 where 的, 管他什么索引性能,完成产品策划的任务就行]

合理使用缓存,减少与 MySQL 服务器的交互,降低磁盘 IO ( Laravel 本身支持多种缓存驱动,可以非常方便地集成不同缓存系统,我这里使用的是 Redis 作为缓存驱动);

// 最懒惰的是 select * 对应的 cache 啦。不会出现同步问题。

PHP 本身不支持并发编程,但是可以引入队列系统异步处理耗时任务,比如邮件发送、涉及数据库操作的数据统计和更新、事件监听和处理等,通过多个队列进程实现并发处理效果( Laravel 本身支持多种队列驱动,可以非常方便地集成不同队列系统,并且提供了 Horizon 这一队列系统解决方案,我这里使用的是 Horizon + Redis + Supervisor 搭建小型队列系统);

// 对于小系统来说,用数据库队列安全可靠没必要折腾那么多。

通过 composer install --optimize-autoloader --no-dev 初始化项目依赖,以便加速 Composer 定位指定类对应的加载文件,同时不安装开发环境使用的依赖。

// 发布要用 mv -T 来做版本发布,方便回滚。发布的时候当然不是 每次都 composer install 啦,网络出问题怎么办。如果 composer.json 没变化,直接 copy vendor 目录就是。
发布脚本连带部署脚本一起跑
wh1012023498
2020-10-12 00:40:18 +08:00
= = 这是做 seo 吗?文章很水。
nonfu
2020-10-12 10:48:13 +08:00
@dvaknheo 是的 composer install 当然只是首次发布的时候用到 每个团队可能发布的方式不一样 把这个命令带入自己的发布流程即可 后续如果扩展包有变更 使用 update 即可 如果没有变更也不需要执行增加额外耗时 如果使用了版本发布 在预发环境这些工作其实都已经完成了 项目代码已经都打包好了
ben1024
2020-10-12 18:23:12 +08:00
还有少用 session,最不济用 redis 做 session 的存储
newtype0092
2020-10-21 17:00:41 +08:00
@nonfu 我在 docker 里启动了一个 8.10 版本的空项目,不修改任何配置的情况下打开默认主页要 1 秒多点,我看了下执行时间主要是 Http Kernel 里的 bootstrap 执行了差不多 1 秒。
请问下在不进行任何优化配置的情况下这个时间是正常的么?
nonfu
2020-10-24 08:39:42 +08:00
@newtype0092 不正常,同样是 docker,同样是空项目,同样是 laravel 8,为啥我这里只要 55 ms

![]( https://qcdn.xueyuanjun.com/storage/uploads/images/gallery/2020-10/16034998629264.jpg)

前提:php 7.4 + xdebug 关闭 + opcache 开启。除此之外没有其他任何优化。
newtype0092
2020-10-24 23:27:09 +08:00
@nonfu 谢谢,从网上查了下发现问题了,框架启动的时候从磁盘读了大量文件,我为了修改方便把 php 目录映射到宿主机了,这种映射的方式从 docker 里读取非常慢,我把目录挪到 docker 内部的目录速度就正常了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX