大型表单的CodeIgniter性能问题

时间:2013-05-15 10:32:17

标签: php performance forms codeigniter

我正在使用CodeIgniter,并且我遇到了一些非常大的表现问题。基本上它可以达到1,000个字段,因为它用于数据输入(许多字段具有相同的值,因此,由于客户端代码,用户花费的时间少于30分钟)。

显示从DB填充的表单只需不到一秒钟。但是当用户点击提交时,现在获取POST数据而不是DB数据的完全相同的代码将永远占用,并且通常会超时。它适用于几百个字段(在DB中提交/插入少于15秒)但如果字段数加倍,则突然需要更长时间。

代码中有3个部分(我不会在这里复制,因为由于这么多字段中涉及的所有逻辑,它很长很复杂):

  1. 在对象内准备数据(来自数据库或表单)
  2. 使用$this->form_validation->run()
  3. 进行表单验证
  4. 数据库插入/编辑
  5. 从数据库读取数据进行编辑时,第1部分非常快。当数据来自POST时,它永远不会到达第2部分,所以它绝对不是表单验证或数据库插入的问题。

    由于我有时会收到此消息,我认为问题来自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保护,因为它在我们的管理部分,但我真的不会这样。

    或许它根本就不是这样,我的代码有点差?

2 个答案:

答案 0 :(得分:1)

问题解决了!基本上我在控制器的开头添加了这个:

if($this->input->post(NULL,TRUE)) $hasPOST = true;
else $hasPOST = false;

我将if($this->input->post(NULL,TRUE)) {do some stuff}的每个实例替换为if($hasPOST) {do some stuff}

现在提交时间不到一秒......使用if($this->input->post(NULL,TRUE))检查是否有一些帖子数据的问题是codeigniter每次都在所有字段上运行xss清理。

答案 1 :(得分:0)

我会再次回顾您的用户场景,是否真的有必要一次性提交所有1000个值?或者你可以将其分解为用户的多步骤过程。似乎有很多数据需要处理。

我会让你的脚本看看你的阻塞点在哪里,它可能与codeIgniter无关,但纯粹是因为你试图提交如此大量的字段。