优化页面收费时间(使用Eloquent请求)

时间:2016-02-17 07:35:00

标签: 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);
};
};

1 个答案:

答案 0 :(得分:2)

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