ブログ投稿のリストを表示すると断続的にクラッシュする(500エラー)codeigniterアプリをデバッグしています。
クラッシュはページのリロードの20〜30%で発生します。これは、サーバーの設定ミスのメモリの問題に関連しているようです。
最初print_r($array); exit;
に、ビューページに送信される各配列のすぐ下を実行してコントローラーを停止しました(ビューを通過せずに)配列を出力するだけであれば問題ありません。タイムアウトは発生しません。
したがって、クエリロジックに問題はないと思います。また、CIのプロファイラーは、ページが正しく読み込まれるとクエリ時間<.001を表示します(クラッシュすると500エラーが発生し、プロファイラーの情報を読み取ることができません)。
次にprint_r
、コントローラーによって送信された配列のループを持つビューのHTMLに移動しましそして、それは時々500エラーを引き起こすボトルネックがあるところです。
このアプリは、単一のビューがコントローラーによって送信されたすべての配列を処理し、最終出力を含むHTMLページを作成するように設計されています。
このため、ビューには多くのPHPロジックが含まれています。foreachループを実行する前に広告ユニットを挿入するためのいくつかの配列分割、postパラメーターの条件付きテスト、ネストされたforeachループなど。
かなり複雑ですが、完全に読みやすくなっています。ただし、ロジックが多すぎるのではないか、このロジックの負荷を小さなフラグメント(複数のビュー)に分割してから、最終的なHTML文字列にマージする必要があるのではないかと思います。
ビューには
- 30-50
if / elseif
、いくつかネスト - 6-7
foreach
、いくつかネスト - 5
array_splice
多数empty
とisset
この問題についてどう思いますか?通常、ロジックの重いビューは避けますか?何かアドバイス?
他のSOの議論のように、Webデザイナーなどのためにビューを「クリーニング」することについては質問していないことに注意してください。ここでの私のポイントは、この構造が私のタイムアウトを引き起こしている可能性があるかどうか、そして潜在的な解決策は何であるかということです。