Laravel 项目加速

很多人都说用 Laravel 做开发很好但是性能太差,事实上 Laravel 并不慢,只不过还是我们没有用好它罢了。

PHP 项目慢的几个重要原因

首先想到的导致 PHP 项目慢的一个首要原因就是 IO 问题, 因为php是解释型语言,所以每次请求都要读取源代码并进行语法解析,解决这个问题要从两方面下手:

1、将解析过的文件的结果都缓存起来,下次直接读取,这方面目前已经有了非常成熟的方案,比如 Xcache, Opcache 等,选择官方的 Opcache就好, 你会发现只要开了 Opcache 并且配置得当, 程序性能马上提升 10 倍是不成问题的

2、减少文件不必要的文件引入,现在大家都用 composer 组织项目,往往会引入很多不必要的类库,导致项目变的臃肿。

基本上解决了 IO 问题, PHP 项目性能就会有极大的提升, 因为大多数 PHP 项目都不是计算密集型项目,CPU并不会成为它的性能瓶颈。

针对 Laravel 项目的加速方法

开启 Opcache

性能提高十倍

composer 加速

没感觉出效果

事实上这条对所有使用 composer 项目都适用,就是执行 composer dump-autoload -o, 它的主要作用是将通过 PSR0/PSR4 加载的文件转化为 classmap 方式的加载,从而减少少IO次数

执行 Laravel 自带的cache 命令

性能翻倍

Laravel 提供了两个预缓存命令:

php artisan config:cache 
php artisan route:cache

# 或直接

php artisan optimize # 相当于执行上面两个命令

执行这两个命令可以将配置以及路由的解析结果缓存起来

直观查看执行上面命令的区别:

关闭debug

打开.env文件,关闭debug设置

APP_ENV=production

APP_DEBUG=false

使用性能更好的Cache和Session驱动

Laravel默认是有缓存的,当你新建一个 Laravel 项目的时候Cache 和 Sessions 的驱动默认为 「文件」。在本地开发环境和小项目中它没啥问题,但是项目增长时,就显得不够用了。
所以,考虑下换个更好的驱动例如 Redis。 Laravel 有内置支持它的方式,而你要做的就是 安装 Predis。

CACHE_DRIVER=redis
SESSION_DRIVER=redis

redis 驱动使用 phpredis

不要使用 predis,phpredis 性能更好

注意使用 phpredis 要安装 php 的 redis 扩展, predis 不需要

使用 swoole 驱动

参考 使用 Octane 扩展加速您的 Laravel 项目

使用队列

有些时候,Laravel 比预期慢,这时你可以考虑异步执行任务

最常见的情况就是发送短信、邮件等;

nginx 层接口拦截加速

对于某些高频的、即时性要求不高的接口,如系统计相关,可以在nginx层进行拦截,纪录日志;用脚本实时的监听日志插入队列,通过队列去进行相关统计。

如用 filebeat 实时监听nginx日志,插入redis队列,再用php脚本去处理队列。

这样可以防止接口访问到php层,而nginx层的性能是远远高于php的

添加缓存

请求接口缓存,mysql中查询到的数据放入redis,下次直接从redis中取数据,提高性能。

注意考虑缓存策略

数据库优化

表设计、索引等

使用CDN

肯定会有很多前端的资源,比如 CSS 文件和 JS 脚本。
你可以通过多种方式来减少发送给用户的数据量:

压缩静态资源;
捆绑静态资源(将多个 CSS 文件或者 JS 脚本合并为一个,以减少请求次数);
开启 gzip 压缩;
开启http 304 缓存
开启 http Cache-Control: max-age={seconds)

然而,如果你遇到大量的流量,我建议你可以将你的静态资源托管到专用的 CDN 服务器上,比如七牛等

引用链接

[1] 使用 Octane 扩展加速您的 Laravel 项目: //wangmaolin.net/article/7ndvd92eo2.html