问题描述
我将所有报价存储在 Redis 中(5 个排序的集合,例如最流行的、最新的等),因为我注意到在 PHP 中过滤它们比在 sql 中更快(我之前缓存了搜索结果,但这导致了另一个问题,但在这个问题中无关紧要))。
我注意到当我打开“CACHE_MODE”时,浏览器的等待时间较短,但内容下载时间较长(我使用谷歌浏览器进行检查)。如果两种情况下的返回值相同(只是加载时间发生变化),这怎么可能?
缓存关闭:
等待 (TTFB):4.60 秒
内容下载:31ms
341 kB 已转移,362 kB 资源
缓存于:
等待 (TTFB):760 毫秒
内容下载:1.60s
341 kB 已转移,362 kB 资源
控制器:
// Ajax request
public function filterOffers(Request $request){
(...)
// Get from cache if possible,otherwise from database
$offers = $this->offers->cache(true)->getAllActiveOffers($request->sort);
// Filter results basing on user request
$this->matchedOffers = $this->offers->filterCollectionForPublicList( $offers,$request);
// Pagination
$this->matchedOffers = $this->matchedOffers->paginate(10,count($this->matchedOffers),$request->page);
return view('offers.partial.offersList',['offers' => $this->matchedOffers])->render();
优惠服务:
如果在 .env 中启用了缓存并且使用了 cache(true),请在缓存中查找键并获取它(如果存在)。否则,从数据库中获取结果,将它们分配给一个键并返回它们。
P.S:我知道sql是可以优化的。
public function getAllActiveOffers($sort = 'default'){
return $this->getFromCacheOrRefresh('allActiveOffers-sort-'.$sort,function() use($sort){
return Offer::ActiveOffers()
->WithVariants()->with('locations')->with('promotions')->with('files')->with('categories')
->with(['owner' => function($query){
return $query->with(['seller' => function($query){
return $query->with('Feedbackscore');
}]);
}])
->distinct()
->ordered($sort)
->get();
});
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)