zoukankan      html  css  js  c++  java
  • Laravel 进阶笔记 5

    关于性能问题

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

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

    publish一个配置文件.

    $ php artisan vendor:publish --provider="BarryvdhDebugbarServiceProvider"

    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里面做呢? 不理解...

  • 相关阅读:
    JavaScript类属性
    JavaScript实现通过的集合类
    Asp.net mvc自定义Filter简单使用
    [转] js实现html table 行,列锁定
    学习笔记:HTML5 Canvas绘制简单图形
    学习笔记:Asp.Net MVC更新部分页面
    Dom随手记
    页面刷新或关闭前警告
    C# 创建WebServices及调用方法
    常用Web Service汇总(天气预报、时刻表等)
  • 原文地址:https://www.cnblogs.com/Montauk/p/10198161.html
Copyright © 2011-2022 走看看