Laravel 进阶笔记 5

关于性能问题

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

安装好debugbar, 这个是laravel的性能诊断工具

publish一个配置文件.

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

config/debugbar.php

修改成:

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

刷新view, 发现多了一个debugger条

发现DB那个部分, 竟然一页有33个查询语句, 是不是很沙雕?

用预加载功能解决问题, 在TopicsController的index方法中, 先搜索出join查询后的结果, 输出到view

  $topics = Topic::with('user', 'category')->paginate(30);
  return view('topics.index', compact('topics'));

这个就避免了N+1问题, 缩短了查询数量, 节省了响应时间. 妈的智障, 这个操作...直接写sql不好么?

 

CSS让导航栏的某些页面active起来, 让用户知道他们目前访问的是哪个category, 需要一个第三方的包, hieu-le/active

$ composer require "hieu-le/active:~3.5"

在helpers里面, 新建一个辅助函数:

function category_nav_active($category_id)
{
    return active_class((if_route('categories.show') && if_route_param('category', $category_id)));
}

在view里面:

              <li class="nav-item {{ active_class(if_route('topics.index')) }}">
                    <a class="nav-link" href="{{ route('topics.index') }}">话题</a>
                </li>
                <li class="nav-item {{ category_nav_active(1) }}">
                    <a class="nav-link" href="{{ route('categories.show', 1) }}">分享</a>
                </li>
                <li class="nav-item {{ category_nav_active(2) }}">
                    <a class="nav-link" href="{{ route('categories.show', 2) }}">教程</a>
                </li>
                <li class="nav-item {{ category_nav_active(3) }}">
                    <a class="nav-link" href="{{ route('categories.show', 3) }}">问答</a>
                </li>
                <li class="nav-item {{ category_nav_active(4) }}">
                    <a class="nav-link" href="{{ route('categories.show', 4) }}">公告</a>
                </li>

 

排序

在要排序的Model里面, 例如topic,

    public function scopeWithOrder($query, $order)
    {
        // 不同的排序,使用不同的数据读取逻辑
        switch ($order) {
            case 'recent':
                $query->recent();
                break;

            default:
                $query->recentReplied();
                break;
        }
        // 预加载防止 N+1 问题
        return $query->with('user', 'category');
    }

    public function scopeRecentReplied($query)
    {
        // 当话题有新回复时,我们将编写逻辑来更新话题模型的 reply_count 属性,
        // 此时会自动触发框架对数据模型 updated_at 时间戳的更新
        return $query->orderBy('updated_at', 'desc');
    }

    public function scopeRecent($query)
    {
        // 按照创建时间排序
        return $query->orderBy('created_at', 'desc');
    }

增加不同的排序方法, 为啥排序之类sql逻辑, 要在model里面做呢? 不理解...

 

转载于:https://www.cnblogs.com/Montauk/p/10198161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值