我正在创建一个应用程序(PHP/Laravel)
,它可以读取数千个文件(> 5000)并在数据表中显示其内容,例如:
我面临的问题是页面加载速度很慢(平均3分钟)。
有没有办法我只能向客户显示50条记录,让处理在幕后进行,直到用户观看这50条记录? 或者有没有办法可以显示大约50条记录,在下一次点击后,我可以为用户做下一条50条记录的分页并显示它。 什么是最好的方法。 这是我到目前为止所做的:
public function getMails(){
$type = INPUT::get("type");
$result = [];
$all_files = Storage::allFiles('boite/'.$type);
foreach ($all_files as $file){
$file_content = Storage::get($file);
preg_match_all('/x\-sender\:(.+?)\n/s',$file_content, $matches_);
$x_sender = trim( $matches_[1][0] );
preg_match_all('/Subject\:(.+?)\n/s',$file_content, $matches__);
$subject = trim( $matches__[0][0] );
preg_match_all('/x\-receiver\:(.+?)\n/s',$file_content, $matches);
array_push($result, (object)["file_name"=> $file ,"x_sender"=>$x_sender, "content"=>$file_content, "subject"=>$subject]);
return view('list',compact('result'));
}
这是我的观点:
@foreach($result as $mail)
<li data-fname="{{$mail->file_name}}">
<div class="md-card-list-item-menu" data-uk-dropdown="{mode:'click',pos:'bottom-right'}">
<a href="#" class="md-icon material-icons"></a>
<div class="uk-dropdown uk-dropdown-small">
<ul class="uk-nav">
<li class="delete_mail"><a href="#"><i class="material-icons"></i> Delete</a></li>
</ul>
</div>
</div>
<span class="md-card-list-item-date"></span>
<div class="md-card-list-item-select">
<input type="checkbox" data-md-icheck />
</div>
<div class="md-card-list-item-sender">
<span>{{ $mail->x_sender }}</span>
</div>
<div class="md-card-list-item-subject">
<div class="md-card-list-item-sender-small">
<span>{{ $mail->x_sender }}</span>
</div>
<span>{{ $mail->subject }}</span>
</div>
<div class="md-card-list-item-content-wrapper">
<div class="md-card-list-item-content" >
{!! nl2br($mail->content) !!}
</div>
</div>
</li>
@endforeach
答案 0 :(得分:1)
由于您正在读取文件,请编写一些唯一标识符以限制发送的记录数。例如:如果你假定唯一标识符,比如文件的第一个字母。然后,在第一个Ajax请求中,发送值为&#34; A&#34;的有效负载。这告诉服务器它需要发送以A开头的X个文件。如果你想要更多的文件发送A2,A3,A4 ...... B1,B2,B3 ...... Z.你基本上想要告诉服务器识别要发送的文件的确切类型和数量。这与我们在Db&s中使用的相同。我们最初发送一个名为page = 10的变量的有效载荷。这告诉服务器发送前十条记录。然后在下一个请求发送page = 11。这告诉服务器发送记录11-21。应用类似的概念。
答案 1 :(得分:0)
添加好方法可以为查询添加限制器,开始位置和结束位置。使用行数对页面进行Pagenate,然后当用户单击第2页时,它使用ajax调用将第二组50拉下来。