具体优化方案请阅读这篇文章:https://xueyuanjun.com/post/22069。
仅仅是对 Laravel 应用性能优化的一家之言而已,如果你有更好的建议,欢迎一起交流。
请不要在评论区引入框架语言之争,很烦这个,有一条删一条,谢谢。
1
ywisax 2020-10-11 00:35:02 +08:00
看终端的样式,应该是本地压远程。。。这样得来的压测结果都是错的。
|
4
nonfu OP @ywisax 至于百度确实存在这个问题 这种集群部署的服务最好在其内网某台机器测试 所以仅做同等压测条件下的一个参考 同等条件的同行网站也不便拿来参考 有诋毁嫌疑 感谢您的指正
|
5
dvaknheo 2020-10-11 14:22:18 +08:00 1
使用 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 目录就是。 发布脚本连带部署脚本一起跑 |
6
wh1012023498 2020-10-12 00:40:18 +08:00
= = 这是做 seo 吗?文章很水。
|
7
nonfu OP @dvaknheo 是的 composer install 当然只是首次发布的时候用到 每个团队可能发布的方式不一样 把这个命令带入自己的发布流程即可 后续如果扩展包有变更 使用 update 即可 如果没有变更也不需要执行增加额外耗时 如果使用了版本发布 在预发环境这些工作其实都已经完成了 项目代码已经都打包好了
|
8
ben1024 2020-10-12 18:23:12 +08:00
还有少用 session,最不济用 redis 做 session 的存储
|
9
newtype0092 2020-10-21 17:00:41 +08:00
@nonfu 我在 docker 里启动了一个 8.10 版本的空项目,不修改任何配置的情况下打开默认主页要 1 秒多点,我看了下执行时间主要是 Http Kernel 里的 bootstrap 执行了差不多 1 秒。
请问下在不进行任何优化配置的情况下这个时间是正常的么? |
10
nonfu OP @newtype0092 不正常,同样是 docker,同样是空项目,同样是 laravel 8,为啥我这里只要 55 ms
![]( https://qcdn.xueyuanjun.com/storage/uploads/images/gallery/2020-10/16034998629264.jpg) 前提:php 7.4 + xdebug 关闭 + opcache 开启。除此之外没有其他任何优化。 |
11
newtype0092 2020-10-24 23:27:09 +08:00
@nonfu 谢谢,从网上查了下发现问题了,框架启动的时候从磁盘读了大量文件,我为了修改方便把 php 目录映射到宿主机了,这种映射的方式从 docker 里读取非常慢,我把目录挪到 docker 内部的目录速度就正常了。
|