1

私はCodeigniterで大規模なソーシャルアプリを構築してきました。4つのモデルと1つのライブラリ(5つのリソース)をロードし、PHPロジックとDBの挿入/選択などを実行する関数があります。これらの5つのリソースはこの関数に固有であり、頻繁に必要とされないため、自動ロードできません。

function abc(){

  log_message('error' , 'block 1'.date('Y-m-d H:i:s'));

  $this->load->model('model1');
  $this->load->model('model2');
  $this->load->model('model3');
  $this->load->model('model4');
  $this->load->library('lib1');

  log_message('error' , 'block 2'.date('Y-m-d H:i:s'));
  // Some DB queries performed here

  if(){
     // Some PHP code
  }else{
    // Some PHP code
  }

 // Some DB queries performed here

 log_message('error' , 'block 3'.date('Y-m-d H:i:s'));
}

Codeigniterのプロファイリングクラスを使用することで、関数全体の実行に約8秒かかるのに対し、その中のDBクエリは1秒しかかからないことがわかりました。コードの多くのポイントでログを記録した後、8秒のうち、ライブラリとモデルをロードするだけで約6.5秒かかるのに対し、コードの処理には1秒以上かかることがわかりました。

関数のプロファイリングを実行し、特定の間隔でタイムスタンプをログに記録することにより、関数abcの合計の実行に8秒かかることがわかりました。ただし、ブロック1とブロック2の時間差は7秒ですが、ブロック2とブロック3の時間差はわずか1秒です。少なくとも私は、読み込みに時間がかかることを知っていますが、その理由はわかりません:(

関数の実行に8秒かかるのは受け入れがたいことであり、解決策を見つけることができません。助けてください…</p>

このサイトは、512 MBのRAMを搭載したDigitalOceanクラウドでホストされており、2人のユーザーのみがテストしています。これを実現するには、RAMを増やす必要がありますか?この読み込み時間を短縮するにはどうすればよいですか…</p>

4

1 に答える 1

0

ライブラリとモデルのコードをチェックせずに「読み込み時間を短縮するにはどうすればよいか」と言うのは難しいですが、とにかく、次のように入力するだけでアプリのベンチマークをテストできるはずです。

$this->output->enable_profiler(true);

ビュー、モデル、またはコントローラー内。

それを試してください

于 2013-03-08T19:27:43.830 に答える