Laravel 5.6 生产环境优化

因为 Larvel 开发方便, API 简洁,一直是我的主力 Web 开发框架。但其实 Laravel 的性能也就一般般,所以在布置 Laravel 应用到生产环境时,用下面这些优化技巧(大概)可以提升性能。这里以 Laravel 5.5+ (PHP >= 7.0.0) 为例,而 PHP7 以下还是直接升级 PHP 吧,效果会好很多。

禁用未使用的服务

Laravel 本身提供了许多服务,但实际上大部分应用并不会全部用到。在 config/app.php.providers 里,注释掉那些没有用到服务,它们就不会再被加载,从而提高速度了。

缓存配置文件

用下面的 Artisan 命令可以缓存 config 文件夹里所有配置位置到缓存文件夹,减少运行时读取的文件数量。

php artisan config:cache

而当更新了配置文件的时候,要删除缓存才会生效。

php artisan config:clear

需要注意的是,当缓存了配置文件之后 env() 函数只会返回空值,所以要想使用缓存配置文件,要保证只在 config 文件夹下的配置文件中调用 env(),而在其他地方则用 config() 来获取配置信息。

缓存路由

如果没有缓存路由,在应用的每个生命周期 Laravel 都要重新注册路由,而缓存路由则省去了这一步骤,因而大幅提高性能。

php artisan route:cache

同理,每次更新路由需要删除再重新缓存

php artisan route:clear

缓存路由并不支持匿名函数,需要在使用前把所有的匿名函数改为控制器函数的形式

更改 Session Driver 和 Cache Driver

默认情况下, Laravel 的 Session Driver 和 Cache Driver 都是文件(file),如果你用了 Memcached 或者 Redis,可以改成相应的 Driver, 毕竟从内存中加载数据比读文件快多了。默认情况下只要改 .env的配置就可以了

CACHE_DRIVER=redis
SESSION_DRIVER=redis

Composer 优化

Laravel 的 autoload 文件是由 composer 生成的,而 composer 本身也提供了优化命令

composer dumpautoload --optimize

或者

composer dumpautoload --classmap-authoritative

PSR-0/4的命名规则下,我们只需要把文件放到指定的文件夹下,就可以用 use 关键字引用而不用像远古时期一样用 include() 引用,开发起来非常方便。但这样做的的效率却并没有直接读取指定文件 classmap 效率高。而这条命令会把 PSR-0/4 的 package 转换到类映射的格式,而无需再在文件系统中嗅探 PHP 类,从而提高加载速度。第二条命令也会进行转换,并且会使 autoloader 只从类映射中加载。

参考文章:
十个 Laravel 5 程序优化技巧,原文还有一些最佳实践和PHP相关的优化,感兴趣的话可以看一下。
Simply Boost Laravel Performance In Production