成千上万的记录分页

时间:2017-03-15 12:34:53

标签: php laravel

我正在创建一个应用程序(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">&#xE5D4;</a>
            <div class="uk-dropdown uk-dropdown-small">
                <ul class="uk-nav">
                    <li class="delete_mail"><a href="#"><i class="material-icons">&#xE872;</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

2 个答案:

答案 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拉下来。