2017-03-15 16 views
1

何千ものファイル(> 5000)を読み込んで、その内容を のようなデータテーブルに表示するアプリケーション(PHP/Laravel)を作成しています。ページの読み込みが非常に遅い(平均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 
+0

これまでに何を試しましたか? [Laravelのページ設定](https://laravel.com/docs/5.4/pagination)、またはおそらく[Google検索](https://www.google.co.in/search?client=opera&q =ララベル+ページネーション)?あなたが直面している特定の問題に対する解決策を得るために書いたコードを追加してください。可能なアプローチを求めることは広すぎるため、StackOverflowフォーマットには適していません。 – manish

答えて

0

それは、クエリに制限を加える位置と終了位置を開始すると行うための良い方法を追加します。行の量を使用してページを作成し、ユーザーがページ2をクリックすると、ajax呼び出しを使用して50の2番目のセットをプルダウンします。

+0

私はデータベースを使用していません。私はファイルを読んでいて、その周りをループしています。 – GENE

1

ファイルを読んでいるので、送信するレコードの数を制限するために固有の識別子を設定してください。例:一意の識別子をファイルの最初の文字とみなしたとします。次に、最初のAjaxリクエストで、値= "A"のペイロードを送信します。これは、Aから始まるX個のファイルを送信する必要があることをサーバーに伝えます。さらにファイルを送信する場合は、A2、A3、A4 ..... B1、B2、B3 ... Zを送信します。基本的には、送信するファイルの種類と数を正確に特定するようにサーバーに指示する方法を作りたいと考えています。これはDbのものと同じです。最初にpage = 10という変数をペイロードとして送信します。これは、サーバーに最初の10個のレコードを送信するように指示します。その後、次のリクエストでpage = 11を送信しました。これは、レコード11-21を送信するようにサーバーに指示します。同様の概念を適用します。

+0

はい、それは良いテクニックです、私はもう1つ良い解決策が見つからない場合に試してみます – GENE

+0

私が与えた解決策は初歩的なものです。私のソリューションのラインに沿ってユニークなペイロードを見つけることを試みてください。また、upvoteと答えを受け入れ、質問を閉じます。試してみてください。 – Araphel

関連する問題