我正在使用CodeIgniter,并且我遇到了一些非常大的表现问题。基本上它可以达到1,000个字段,因为它用于数据输入(许多字段具有相同的值,因此,由于客户端代码,用户花费的时间少于30分钟)。
显示从DB填充的表单只需不到一秒钟。但是当用户点击提交时,现在获取POST数据而不是DB数据的完全相同的代码将永远占用,并且通常会超时。它适用于几百个字段(在DB中提交/插入少于15秒)但如果字段数加倍,则突然需要更长时间。
代码中有3个部分(我不会在这里复制,因为由于这么多字段中涉及的所有逻辑,它很长很复杂):
$this->form_validation->run()
从数据库读取数据进行编辑时,第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保护,因为它在我们的管理部分,但我真的不会这样。
或许它根本就不是这样,我的代码有点差?
答案 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无关,但纯粹是因为你试图提交如此大量的字段。