1

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

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

代码中有 3 个部分(我不会在此复制,因为涉及到许多领域的所有逻辑,它非常长且复杂):

  1. 准备对象内部的数据(来自数据库或表单)
  2. 使用表单验证$this->form_validation->run()
  3. 数据库插入/编辑

从数据库读取数据进行编辑时,第 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 保护,因为它在我们的管理部分,但我真的不会那样做。

或者也许根本不是这样,我的代码有点糟糕?

4

2 回答 2

1

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

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

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

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

于 2013-05-15T11:18:33.860 回答
0

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

我会给你的脚本计时,看看你的瓶颈在哪里,它可能与 codeIgniter 无关,但纯粹是因为你试图提交如此大量的字段。

于 2013-05-15T10:53:37.377 回答