从数据库中获取大数据时如何减少laravel中的laravel加载时间?

时间:2016-09-07 10:17:13

标签: performance laravel load

假设我点击 / demo url然后它将转到控制器n从数据库表中取出data1,其中有400个数据,类似数据2,有1200个数据。 结构以这种方式工作首先它从控制器获取来自db的1200 + 400数据然后用这些400 + 1200数据进行查看n使用foreach它在modal1中显示400个模数中的1200数据...它加载大数据,它加载缓慢的方式。这就是为什么我尝试拆分datas.so我为每个按钮调用使用了ajax但是对控制器的ajax调用在localhost中工作得很好但在真正的ip中不起作用。 有没有更好的方法/解决方案来减少加载时间??

我的结构 在控制器中

$data1(here data is around 500)
$data2 (here data is around 1200)
return view(viewname’,compact('data1','data2'));

在视图中

<button class=”t1”>
<button class=”t2”>
@include(‘modal1’)
@include(‘modal2’)

在modal1

@foreach($data1 as $v)
{{$v->name}}
@endforeach

在modal2

@foreach($data1 as $v)
{{$v->name}}
@endforeach

这里当我点击按钮它打开modal1..n当我点击另一个按钮它打开modal2.i使用模态中的数据表。(有搜索,分页)

2 个答案:

答案 0 :(得分:0)

当我们使用Datatable时,所有数据首先加载,然后用分页显示。如果您拥有大量数据,这可能会花费很多时间。当您使用分页时,如果根据分页的数据仅显示,那么它将节省您的加载时间。

您可以使用此包来解决此问题: https://github.com/yajra/laravel-datatables

答案 1 :(得分:0)

要改进 Laravel 网站,您必须考虑很多事情。

在您的应用程序中使用预先加载

在 get() 方法的查询中使用 ->cursor()。

例如:

    $data = DB::table("users")
    ->select('*')
    ->cursor();

使用缓存

$data_key = "any-key-variable";

    if (Cache::has($data_key)) {
          $getData = Cache::get($data_key);
    } 
   else {
     $getData = DB::table("users")
                    ->select('*')
                    ->cursor();
       Cache::put($data_key, $getData,720);
    }

}

另外,在控制器的构造函数中使用 this 或调用函数

ini_set('memory_limit', '-1');

ini_set('max_execution_time', '3000');

ini_set('request_terminate_timeout', '3000');

例如

公共函数__construct() {

           ini_set('memory_limit', '-1');
           ini_set('max_execution_time', '3000');
           ini_set('request_terminate_timeout', '3000');             

}