【发布时间】:2019-07-29 12:15:32
【问题描述】:
我有一个网页,我从数据库中获取了 1000 条记录。但是页面需要太多时间来加载,甚至 safari 浏览器都会发出警告说网页占用了太多内存。现在我可以减少数据数量但可以减少请求有什么方法可以减少请求数量。 如果我使用延迟加载查询会提高网页速度?因为我的网页包含很多视频网址,谷歌驱动器网址和文档可能是解释器转到该链接并检查并返回应用程序我如何在 1 个请求中做到这一点
这是我的数据显示
$productsFeatured = Product::select('products.low_emitting_material_prerequisite_file',
'manufacturers.phone','manufacturers.address','manufacturers.linkedin_url','manufacturers.city','manufacturers.state',
'products.specs_file','products.bim_file_url','products.specs_file_url','products.low_emitting_material_credit_file',
'products.id', 'products.name', 'products.logo','products.video_file', 'products.manufacturer_id',
'products.division_id', 'products.section_id','products.datasheet_file', 'products.website', 'divisions.name as division_name', 'divisions.code as division_code',
'sections.name as section_name', 'sections.code'
)
->whereIn('products.status', ['active']);
if($request->chps_approved && in_array('63', $request->chps_approved)){
$productsFeatured->where(function ($query) {
$query->where('products.low_emitting_material_prerequisite_file', '!=', '');
});
}
$productsFeatured->leftJoin('products_selected_leeds', 'products.id', '=', 'products_selected_leeds.product_id')
->leftJoin('sections', 'products.section_id', '=', 'sections.id')
->leftJoin('divisions', 'products.division_id', '=', 'divisions.id');
if($request->division_code){
$productsFeatured->where('products.division_id', '=', $request->division_code);
$data['divisionn_code'] = $request->division_code;
}
else{
$productsFeatured->where('products.division_id', '=', '1');
$data['divisionn_code'] = 1;
}
$productsFeatured->join('manufacturers', 'products.manufacturer_id', '=', 'manufacturers.id')
->join('users', 'manufacturers.user_id', '=', 'users.id')
->orderBy('divisions.code', 'asc')
->orderBy('sections.code', 'asc')
->groupBy('products.id');
if($request->ajax()){
if($request->manufacturer){
$productsFeatured->whereIn('products.manufacturer_id', $request->manufacturer);
}
if($request->searchTxt){
$search_text = $request->searchTxt;
$productsFeatured->where(function ($query) use ($search_text) {
$query->orWhere('manufacturers.name', 'like', '%' . $search_text . '%');
$query->orWhere('sections.name', 'like', '%' . $search_text . '%');
$query->orWhere('products.name', 'like', '%' . $search_text . '%');
$query->orWhere('sections.name', 'like', '%' . $search_text . '%');
$query->orWhere('sections.code', 'like', '%' . $search_text . '%');
});
}
if($request->leedv4){
$where_in = $request->leedv4;
$query = DB::table('Products_selected_leeds')
->select('product_id')
->whereIn('leed_id',$where_in)
->get();
$toCollection = collect($query);
$arrayOfIds = $toCollection->pluck('product_id')->toArray();
$productsFeatured->whereIn('products.id', $arrayOfIds);
}
if($request->website){
$productsFeatured->where('website','like', '%www%');
}
if($request->video_file){
$productsFeatured->where('products.video_file','like', '%www%');
}if($request->bim_file_url){
$productsFeatured->whereNotNull('bim_file_url');
}if($request->specs_file){
$productsFeatured->where('bim_file_url','like', '%www%');
}
if($request->featured_products){
$featured = $request->featured_products;
$productsFeatured->where(function ($query) use ($featured) {
$query->orWhere('products.featured',$featured);
$query->orWhere('manufacturers.featured',$featured);
});
}
$productsFeatured = $productsFeatured->orderBy('manufacturers.name', 'ASC')->get();
}else{
$productsFeatured = $productsFeatured->orderBy('manufacturers.name', 'ASC')->get();
}
我可以在第一条记录显示为屏幕大小,当用户用户向下滚动然后查询再次运行并获取记录到屏幕大小
【问题讨论】: