php - 优化页面充电时间(使用 Eloquent 请求)

标签 php mysql optimization eloquent

我想优化我的代码以减少页面充电时间。

在每个页面中,我都有一个向 mysql DTB 发出请求的句柄函数,我想知道是否可以存储当天的一些数据,并最终每天更新一次数据,或者当某个函数被调用时。我必须明确我使用 Eloquent 来发出请求。

这可能吗?

编辑:这是每次页面收费时我调用的代码

$handleMenu = function () use ($app){
return function() use ($app){
    $req = $app->request;

    //Get resource URI
    $resourceUri = $req->getResourceUri();

    if(!isset($_SESSION["Edition"])) {
        $_SESSION["Edition"] = "NANCY";
    }
    $selectedEdition = Edition::where("nomXML", "=", $_SESSION["Edition"])->first();
    $rubriques = Rubrique::where("nomAssocie", "!=", "Edito")->where("nomAssocie", "!=", "Offre d'emploi")->get();
    $saisons = Article::with("rubrique")->where("saison", "=", true)->take(5)->get();
    $festival = Article::with("rubrique")->where("festival", "=", true)->take(5)->get();
    $editions = Edition::where("nomAssocie", "not like", "%-%")
        ->where("nomXML", "!=", "TTES EDITIONS")
        ->where("nomXML", "!=", "ARTGASTRONOMIE")
        ->get();
    $today = $date = date('Y-m-d');
    $banniere = Pub::where("type", "=", 2)
        ->whereHas("Pub_Edition", function($query) use($selectedEdition){
            $query->where("id_edition", "like", "%".$selectedEdition->id_edition."%");
        })->where("date_deb", "<=", $today)
        ->where("date_fin", ">=", $today)
        ->orderByRaw("RAND()");
    if(strpos($resourceUri, "/articles/rubrique/") !== false){
        $arr = explode( '/', $resourceUri );
        $banniere = $banniere->whereHas("Pub_Rubrique", function($q) use($arr){
            $q->whereHas("Rubrique", function($q2) use($arr){
                $q2->where("nomXML", "=", $arr[3]);
            });
        });
    };
    $banniere = $banniere->first();
    if($banniere != null){
        $banniere->nb_affichage = $banniere->nb_affichage + 1;
        $banniere->save();
    }
    $twig = $GLOBALS["globalapp"]->view()->getEnvironment();
    $twig->addGlobal('menuRubriques', $rubriques);
    $rubriques = $rubriques->toArray();
    usort($rubriques, function($a, $b)
    {
        return strcmp($a["nomAssocie"], $b["nomAssocie"]);
    });
    $twig->addGlobal("rubriques", $rubriques);
    $twig->addGlobal("festivals", $festival);
    $twig->addGlobal("saisons", $saisons);
    $twig->addGlobal("editions", $editions);
    $twig->addGlobal("actualEdition", $_SESSION["Edition"]);
    $twig->addGlobal("selectedEdition", $selectedEdition);
    $twig->addGlobal("banniere", $banniere);
};
};

最佳答案

大多数 DBMS 都非常擅长缓存查询,因此这可能不是瓶颈。您需要确保查询本身已优化。如果你使用 Eloquent,请确保任何关系都是 eager loaded .如果不这样做,那通常会减慢您的页面加载速度,因为您要多次访问数据库。 如果确实有必要,您可以使用 Memcached 或 Redis 等对象缓存来缓存数据,但如前所述,MySQL 非常擅长缓存查询...

关于php - 优化页面充电时间(使用 Eloquent 请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450475/

相关文章:

php - 使用 DomPDF/PHP 使用 Acrobat Jascript 生成 PDF

php - 如何在 MYSQL 插入查询中编写

mysql - HistoryRow 没有键

c++ - perl 正则表达式比 c++/boost 更快

.net - F# Microsoft Solver Foundation - NelderMeadSolver 类

php - 使用 PHP + MySQL 缓存大量内容

php - 如何在不使用分页的情况下返回到相同的 MySql 记录

php - Laravel 内存不足

mysql - 将从 SQL 查询返回的值插入到另一个表中

python - 当两个数组都已排序时,更快的搜索排序方法