10个Laravel5基础性能优化小技巧

性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能。

接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论。

一、使用Laravel自带的优化命令优化

  1. 关闭应用debug app.debug=false
  2. 路由缓存 php artisan router:cache
  3. 配置信息缓存 php artisan config:cache
  4. 类映射加载优化 php artisan optimize
  5. 自动加载优化 composer dumpautoload
  6. 使用Laravel缓存
  7. 根据需要只加载必要的中间件
  8. 使用即时编译器(JIT),如:HHVM、OPcache
  9. 使用 PHP 7.x
1. 关闭应用debug

打开应用根目录下的 .env 文件,把 debug 设置为 false。

APP_DEBUG=false

2. 路由缓存

路由缓存可以有效的提高路由器的注册效率,在大型应用程序中效果越加明显。

生成路由缓存:

php artisan router:cache

运行以上命令会生成 bootstrap/cache/routes.php 文件,需要注意的是,路由缓存不支持路由匿名函数编写逻辑,否则会报错。

清除路由缓存:

php artisan route:clear

此命令就是把 bootstrap/cache/routes.php 文件删除。

3. 配置信息缓存

使用 Artisan 自带的命令,把 config 文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量。

php artisan config:cache

上面命令会生成 bootstrap/cache/config.php 文件,可以使用以下命令清除配置信息缓存:

php artisan config:clear

注意:配置信息缓存不会随着配置信息更新而自动重载,所以,开发时候建议关闭配置信息缓存,一般在生产环境中使用。

4. 类映射加载优化

optimize 命令把常用加载的类合并到一个文件中,通过减少文件的加载来提高运行效率。

php artisan optimize

运行上面这个命令会生成 bootstrap/cache/packages.phpbootstrap/cache/services.php 两个文件。

要清除类映射加载优化,请运行以下命令:

php artisan clear-compiled

提示:由于 PHP 自身的性能优化,optimize 命令已经不能给应用提供显著的性能提升,因此在新版本中optimize命令已经被彻底移除了。

5. 自动加载优化

composer dumpautoload -o

Laravel 应用程序是使用 composer 来构建的。这个命令会把 PSR-0 和 PSR-4 转换为一个类映射表来提高类的加载速度。

注意:php artisan optimize命令里已经做了这个操作。

二、使用debugbar进行问题定位

laravel-debugbar 用于直观的显示调试及错误信息,提高开发效率。

2.1 安装

使用 Composer 安装该扩展包:

composer require barryvdh/laravel-debugbar

安装完成后,在 config/app.php 中注册服务提供者到 providers 数组。

Laravel 5.x

注册如下服务提供者:

Barryvdh\Debugbar\ServiceProvider::class,

接下来运行以下命令生成此扩展包的配置文件config/debugbar.php

php artisan vendor:publish --providers="Barryvdh\Debugbar\ServiceProvider"

打开 config/debugbar.php,将 enabled 的值设置为:

'enabled' => env('APP_DEBUG', false),

修改完以后,Debugbar 分析器的启动状态将由 .env 文件中 APP_DEBUG 值决定。

页面刷新后, 看到下图即表示运行成功。

三、使用加载进行优化

使用(with/load)进行预加载

四、使用DB_listen进行慢sql的查询

通过DB门面的listen方法监听查询事件,比如我们在记录日志和调试的时候这会给我们确定问题提供便利,可以在服务提供者的boot方法中注册该监听器,例如我们在 AppServiceProviderboot方法中定义监听器如下:

    
\DB::listen( function($query) {
    $sql = $query->sql;
    $bindings = $query->bindings;
    $time = $query->time;

    if( $time > 110 ){
        \Log::debug(var_export(compact('sql','bindings','time'),true));
    }
});
   

这样我们可以在 storage/logs/laravel.log 查看记录的慢查询日志了,然后针对慢查询做相应的优化即可。

15 人推荐

声明:本文原创发布于加藤非博客,转载请注明出处:加藤非博客 jiatengfei.com 。如有侵权,请联系本站删除。

加藤非博客
请先登录再发表评论
  • 最新评论

  • 总共0条评论