我想优化我的代码,以便页面充电时间更短。
在每个页面中,我都有一个句柄功能,可以向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);
};
};
答案 0 :(得分:2)
大多数DBMS都非常擅长缓存查询,因此可能不是瓶颈。您需要确保查询本身已经过优化。如果您正在使用Eloquent,请确保任何关系为eager loaded。如果没有这样做,这往往会减慢您的页面加载速度,因为您正在进行大量的数据库访问。 如果真的有必要,你可以使用像Memcached或Redis这样的对象缓存来缓存你的数据,但正如所说,MySQL非常擅长缓存查询......