因为 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