CodeIgniter を使用していますが、非常に大きなフォームでパフォーマンスの問題が発生しています。データ入力に使用されるため、基本的には 1,000 フィールドに達する可能性があります (フィールドの多くは同じ値であるため、クライアント側コードのおかげで、ユーザーは 30 分未満で入力できます)。
DB から入力されたフォームを表示するのに 1 秒もかかりません。しかし、ユーザーが送信をクリックすると、DB データの代わりに POST データを取得するまったく同じコードが永遠にかかり、通常はタイムアウトします。数百のフィールド (DB に送信/挿入するのに 15 秒未満) では問題なく動作しますが、フィールドの数が 2 倍になると、突然、はるかに長い時間がかかります。
コードには 3 つの部分があります (非常に多くのフィールドに関連するすべてのロジックのために非常に長く複雑になるため、ここではコピーしません)。
- オブジェクト内のデータ (DB またはフォームから) を準備する
- を使用したフォーム検証
$this->form_validation->run()
- DB の挿入/編集
パート 1 は、編集のために DB からデータを読み取るときに非常に高速です。データが POST から来る場合、パート 2 に到達することはないため、フォームの検証や DB 挿入の問題ではありません。
このメッセージが時々表示されるので、この問題は Codeigniter の XSS 保護に起因すると考えられます。
Maximum execution time of 90 seconds exceeded in (...)/system/core/Security.php
これらのいずれかを使用すると少し遅いかどうか知っていますか? $this->post->input('fieldname', TRUE)
と$this->input->post(NULL, TRUE)
。Codeigniter は使用するたびに多くの計算を行うので、計算で使用する前に各投稿入力を変数に保存する必要がありますか?
別の方法として、XSS 保護を無効にすることもできますが、それは私たちの管理部分にあるためです。
それとも、まったくそうではなく、私のコードはどういうわけか貧弱ですか?