10. 如何避免 N+1?

本教程最新版为 8.x,当前版本已放弃维护,请阅读最新版本!

什么是 N+1 问题?

N+1 是 ORM 数据层查询时,最常见的、也是危害性很大的性能问题。

为了更好地帮助理解,我们用一个例子来演示。还是以 Larabbs 为例子,浏览器访问首页,打开 Debugbar 并定位到数据库请求统计栏目下:

避免 N+1

为了方便演示,我们修改读取数据的请求如以下:

app/Http/Controllers/TopicsController.php

<?php
.
.
.
class TopicsController extends Controller
{
    .
    .
    .
    public function index(Request $request, Topic $topic, User $user, Link $link)
    {
        // 取出数据,无「预加载」的情况,存在 N+1 问题
        $topics = $topic->paginate(100);

        $active_users = $user->getActiveUsers();
        $links = $link->getAllCached();

        return view('topics.index', compact('topics', 'active_users', 'links'));
    }
    .
    .
    .
}

保存后刷新页面,可以感...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0

暂无话题~