私は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>