Laravel性能优化策略大全

laravel性能优化的方法有哪些

  • 使用缓存:Laravel提供了多种缓存驱动,如Redis、Memcached等,可以将经常访问的数据进行缓存,减少数据库的查询次数,提高性能。
  • 使用数据库索引:合理地创建索引可以加快查询速度,减少数据库的负载。
  • 避免频繁的数据库查询:可以通过使用Eager Loading、预加载关联模型等方式,减少数据库查询的次数。
  • 使用队列处理任务:将一些耗时的操作放入队列中,异步处理,避免阻塞应用程序的性能。
  • 使用缓存视图:将经常访问的视图进行缓存,减少视图渲染的时间。
  • 优化代码:避免使用不必要的循环、嵌套查询等操作,尽量使用原生查询代替ORM查询等,提高代码执行效率。
  • 使用懒加载:只加载需要的数据,减少不必要的查询,提高性能。
  • 优化数据库查询:合理使用数据库的查询语句、使用索引等,提高查询效率。
  • 使用CDN加速:将静态资源如图片、CSS、JS等存放在CDN上,减少服务器的请求负载。
  • 使用缓存数据库查询结果:将数据库查询的结果进行缓存,减少重复查询,提高性能。
  • 使用性能优化工具:如Laravel Debugbar、Blackfire等工具可以帮助定位性能瓶颈,优化代码。
  • 使用合适的服务器环境:配置服务器的硬件和软件环境,如使用高性能的Web服务器、数据库服务器等,提高系统的响应速度。
  • 使用监控工具:定期监控系统的性能指标,及时发现问题并进行优化。
  • 使用缓存HTTP响应:将常用的HTTP响应缓存起来,减少服务器的负载。
  • 优化数据库表结构:合理设计数据库表结构,避免冗余字段,提高查询效率。
  • 使用编译器缓存:Laravel提供了编译器缓存功能,可以提高框架的加载速度。

composer 优化

此命令会把 PSR-0 和 PSR-4 转化为一个映射表,来提高类的加载速度

composer dump-autoload --optimize

安装 Debugbar

composer require "barryvdh/laravel-debugbar:~3.2" --dev

# 生成配置文件
php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

# 编辑 config/debugbar.php 将 enable 得值设置为
'enable' => env('APP_DEBUG', false),

# 并在 .env 配置文件中开启
APP_DEBUG=true

laravel 配置缓存

注意:如果你的配置信息里存在闭包,执行以上命令时将会报错:Your configuration files are not serializable 。解决办法是改写闭包函数为一般的函数,或者改写为类方法。
# 设置配置缓存,会生成 bootstrap/cache/config.php 文件
php artisan config:cache

# 清空配置缓存,也可以直接删除 bootstrap/cache/config.php 文件来清除
php artisan config:clear

测试

# 手动创建 200 个配置信息
for i in $(seq -f "app%03g.php" 1 200); do cp ./config/app.php ./config/$i; done

# 清除掉 bootstrap/cache/config.php 配置缓存文件
php artisan config:clear

laravel 路由缓存

基于闭包的路由无法被缓存。要使用路由缓存。你需要将任何闭包路由转换成控制器路由。
# 设置路由缓存
php artisan route:cache

# 清除路由缓存
php artisan route:clear
# 也可以直接删除 bootstrap/cache/routes.php 缓存文件

路由统计

php artisan route:list | wc -l | awk '{print $1 - 4}'

生成 500 个测试路由

for i in $(seq -f "%03g" 1 500); do echo "Route::get('test$i/{id}/{query}','Auth\LoginController@testtest$i')->name('test$i')->middleware('auth');" >> routes/web.php; done

类映射加载优化

laravel 6.x 中,会生成 bootstrap/cache/config.phpbootstrap/cache/packages.phpbootstrap/cache/routes.phpbootstrap/cache/services.php 这四个文件。

services.php 的作用,是把 laravel 在启动过程中需要加载的文件,命名空间和文件路径一个个列举在一个数组中,当 laravel 启动的时候,直接通过这个数组来读取文件。

packages.php 则是将 laravel 扩展包的 provider 和 facade 整理到一个文件里面,在 laravel 启动加载的时候,直接按照这里的数组进行加载。

php artisan optimize

# 清空类映射
php artisan optimize:clear

合理划分子视图

建议不要子模版嵌套子模板,因为可能会出现 N + 1 的问题

会话驱动选择 redis,并且必须选择 phpredis 类库

索引优化

如何在 laravel 中添加索引?

添加全文索引时,使用
DB::statement('ALTER TABLE posts ADD FULLTEXT full(name, content)');

修改索引名称

$table->renameIndex('from', 'to')

如何在 laravel 中删除索引?

资源压缩(JS/CSS)

开发环境时,执行

npm run dev

生产环境时,执行 (只有在生产环境中才会对内容进行压缩)

npm run prod

压缩 HTML

# 安装 laravel-page-speed 扩展包,来去除 html 注释、回车换行符和多余的空格
composer require renatomarinho/laravel-page-speed

# 发布配置文件
php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider"

# 在 Kenel.php => $middlewareGroups => web 中添加中间件

\RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes::class, // 移除无用的 HTML 属性
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments::class, // 移除注释
\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class,  // 移除不必要的 URL 前缀
\RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class, // 处理换行符和空格

swoole 加速

# 安装 laravles
composer require hhxsv5/laravel-s

# 发布配置
php artisan laravels publish

# 启动 laravels
php bin/laravels start
# 后台守护进程执行
php bin/laravels start -d

nginx 配置 laravels


upstream swoole {
    # 如果是使用 laradock ,请将 127.0.0.1 更改为 workspace
    server 127.0.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;
    keepalive 16;
}

server {
    listen 80;
    listen 443 ssl http2;
    server_name larablog.test;
    root /var/www/larablog/public;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri @laravels;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log /var/log/nginx/larablog_error.log;
    access_log /var/log/nginx/larablog_access.log;

    sendfile off;

    client_max_body_size 100m;

    location @laravels {
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout 120s;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://swoole;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/larablog.test.crt;
    ssl_certificate_key /etc/nginx/ssl/larablog.test.key;
}

如果是使用 laradock 的话,还需要将 .env 添加监听地址为 workspace

LARAVELS_LISTEN_IP=workspace

# 设置后台启动 laravelS 服务,如果需要查看则执行 ps -ef|grep laravels 命令
LARAVELS_DAEMONIZE=true

 

 

 

原文链接:https://vuesite.cn/42789.html,转载请注明出处。
0
显示验证码
没有账号?注册  忘记密码?