【问题标题】:How to reduce laravel load time in laravel when take big datas from database?从数据库中获取大数据时如何减少 laravel 中的 laravel 加载时间?
【发布时间】:2016-09-07 10:17:12
【问题描述】:

假设我点击 /demo url,那么它将转到控制器 n,从具有 400 个数据的数据库表中获取数据 1,类似地,数据 2 具有 1200 个数据。 结构以这种方式工作,首先它转到控制器从数据库中获取 1200+400 个数据,然后使用 foreach 使用这些 400+1200 个数据进行查看,它在 modal1 中显示 400,在 modal2 中显示 1200 个数据……它以缓慢加载的方式加载大数据。这就是为什么我尝试拆分数据的原因。所以我对每个按钮调用都使用了 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’)

在模态1中

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

在模态2中

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

在这里,当我单击按钮时,它会打开 modal1..n,当我单击另一个按钮时,它会打开 modal2。我在 modal 中使用了数据表。(有搜索、分页)

【问题讨论】:

  • 分页通常是将大块数据减少到更易于管理的大小的方法,但 500 或 1200 行确实不是“大数据”。
  • 可能不是大数据..........但它的加载速度很慢......这对于用户等待加载是非常低效的
  • 你应该用时间来定义“慢”——10秒,100毫秒?我的意思是它不应该加载缓慢。确保您的数据被正确索引,在重要位置启用一些日志记录,使用EXPLAIN mysql 功能(或您的 DBMS 中存在的任何等效功能)并找出导致它变慢的原因。顺便说一句,您是否有机会使用带有“共享文件夹”功能的 Vagrant?这往往会对性能产生很大影响,即在实时服务器上发生的事情应该比在 Vagrant 机器上发生得更快。
  • 需要一些时间的原因可能是因为您的浏览器需要渲染大量新的 HTML。 @KaloyanDoichinov 是对的,您应该使用分页来减少大块。查看this了解更多信息。
  • @KaloyanDoichinov 我忘记通知我在模态中使用了数据表......已经有分页,搜索。不,我没有使用 vagrant...我可以先减少加载吗??

标签: performance laravel load


【解决方案1】:

要改进 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');             

}

【讨论】:

    【解决方案2】:

    当我们使用 Datatable 时,所有数据首先加载,然后以分页显示。如果您有大量数据,这可能需要很长时间。由于您使用的是分页,如果只显示分页数据,那么它将节省您的加载时间。

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

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2020-10-21
      • 2020-11-10
      • 2021-05-12
      • 2014-01-19
      • 1970-01-01
      相关资源
      最近更新 更多