CodeIgniter 项目上的第一个 HTTP 请求的延迟非常高

2024-02-22

我和一个朋友刚刚开始从事一个项目,其他人几年前就停止了开发,我们正在努力恢复它。我们已经解决了大部分与设置相关的问题,但有一个非常烦人的问题我们无法解决。

在我们的本地主机中,所有页面都占用A LOT加载/刷新的时间。我指的不是资产、脚本或任何东西,问题是第一个请求完成之前的延迟。大多数时候需要15到30秒,这是不可接受的,有时甚至会长达1或2分钟。

例如,下面是 Chrome 开发工具中“网络”选项卡的屏幕截图。第一行是视图,其他行是资产。


我们在谷歌上搜索了几个小时并尝试了一些不同的方法,但没有一个起作用。一些解决方案如this one https://serverfault.com/a/349618指向一些 Apache 的httpd.conf设置,但我放弃了它,因为我在其他项目中使用相同的服务器,并且这种情况从未发生过(无论如何我都尝试过,但没有成功)。其他人指出 PHP 版本冲突,所以我尝试将 MAMP 中的 PHP 从 5.4.10 更改为 5.2.17(该项目需要 5.2.3+),但这似乎也不起作用。

除了我的 MAMP 安装之外,我们还在带有 WAMP (PHP5.5) 的 Windows 计算机中测试了它,并且还在另一台带有干净的 MAMP (PHP5.5) 的 Mac 中测试了它,并且在这两种环境中都会发生相同的情况。因此,我们现在想知道问题是否可能出在 CodeIgniter 本身(这听起来不太可能)或某些项目配置中,但我们对 CodeIgniter 还很陌生(也不是 PHP 专家),找不到任何东西。

哦,我们也尝试联系最初的开发者,但他们说那是两年前的事,听起来他们不愿意提供帮助。我真的希望他们当时开发项目时没有遇到这个问题,因为加载时间为 30 秒,这太疯狂了。

有人有任何想法或了解更多我们可以尝试找到问题的事情吗?如果需要的话我可以发布一些代码。


Update:我刚刚发现这个未解决的问题 https://stackoverflow.com/q/23673578/2999215用户在使用 Laravel 时遇到了类似的问题,但只是有时。正如我所说,就我而言,这种情况发生了always,延迟时间从约 10 秒到几分钟不等。


更新2:正如 Wrikken 所建议的,我通过 xdebug 分析器运行了它,但我不确定如何解释结果以了解问题所在。我使用 PHPStorm 的“Analyze Xdebug Profiler”工具打开了一个快照,并按每次调用所用的时间对其进行了排序。以下是一些屏幕截图:

并按自己的时间排序:

That CashewModel在某些行中出现的是由以前的开发人员构建的某种自定义库,这也导致了我们已经解决的一些问题。我希望问题没有隐藏在那里,因为我不知道大多数自定义代码是如何工作的。

有任何想法吗?再说一遍,如果需要的话我可以发布代码。


更新3:深入研究代码,发现MY_Controller在上面的屏幕截图中是一个文件,以前的开发人员在其中创建了一些自定义控制器,扩展CI_Controller。我刚刚发现他们把所有的 Cashew 代码都推到了 GitHub 上,这是 MY_Controller 文件 https://github.com/cubledesarrollo/cashew/blob/master/application/core/MY_Controller.php.

我还将在此处粘贴第 467 行周围的所有相关代码(在 GitHub 的版本中是 464),其中涉及_remap里面的函数CashewController并且是分析器所说的所有时间都花在的地方。我把一些评论和名字翻译成英文。

/**
 *
 * Extension of the default controller, adding support for templates
 * 
 * Usage example:
 *
 * class Dummy extends EC_Controller
 * {
 *     public function index()
 *     {
 *         $this->add_section('id_in_template', 'page_name');
 *         $this->render_page(); // Renders the default template.
 *     }
 * }
 *
 */
class CashewController extends CI_Controller
{
    //
    // Some attributes here
    //

    function __construct() { ... }

    /**
     * We use this _remap to automatically create the CRUD method calls
     *
     * @param string $method
     * @param string $params
     */
    public function _remap($method, $params = array())
    {
        // NEW
        if ($method == 'new') {
            $method = '_new';
        }
        // CREATE
        else if ($method == 'index' && $this->request_method() == 'post') {
            $method = '_create';
        }
        else if (is_numeric($method) && $this->request_method() == 'post' && count($params) == 0) {
            $params[0] = $method;
            $method = '_create';
        }
        // SHOW
        else if (is_numeric($method) && count($params) == 0) {
            $params[0] = $method;
            $method = '_show';
        }
        else if (is_numeric($method) && count($params) == 1 && $params[0] == 'edit') {
            // EDIT
            if ($this->request_method() == 'get') {
                $params[0] = $method;
                $method = '_edit';
            }
            // UPDATE
            else if ($this->request_method() == 'post') {
                $params[0] = $method;
                $method = '_update';
            }
        }
        // DELETE
        else if (is_numeric($method) && count($params) == 1 && $params[0] == 'delete') {
            $params[0] = $method;
            $method = '_delete';
        }

        if (method_exists($this, $method)) {
            return call_user_func_array(array($this, $method), $params);
        }
        show_404();
    }

    //
    // Some more functions
    //
}


所以里面发生了一些事情call_user_func_array(array($this, $method), $params), right?


我发现了这个问题,感谢一条评论 https://stackoverflow.com/questions/25755699/very-high-latency-in-first-http-request-on-codeigniter-project/25770788#comment40308296_25755699上面发布了,但用户没有写答案,所以我将其发布在这里。

以前的开发人员编写的代码大量使用了memcached扩展名,我以前从未使用过,所以我不知道它是什么,也不知道我需要在我的计算机中启用它。我按照步骤操作here https://github.com/majksner/php-memcached-mamp就是这样,加载时间现在可以接受了。

感谢大家!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeIgniter 项目上的第一个 HTTP 请求的延迟非常高 的相关文章

  • Facebook“喜欢”按钮,喜欢另一个页面/URL

    我有一个链接列表 每个单独的页面上都有一个 喜欢 按钮来 喜欢 该页面 但我想要列表中每个链接旁边有一个 喜欢 按钮 该按钮会喜欢旁边链接的 URL 就像单击链接然后单击 喜欢 按钮一样 我该怎么做呢 要在每个单独的页面上创建按钮 我使用以
  • 多个where条件codeigniter

    如何将此查询转换为活动记录 UPDATE table user SET email email last ip last ip where username username and status status 我尝试将上面的查询转换为 d
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • 合并两个数字键关联数组并保留原始键

    我有两个这样的数组 array 11 gt 11 22 gt 22 33 gt 33 44 gt 44 array 44 gt 44 55 gt 55 66 gt 66 77 gt 77 我想组合这两个数组 使其不包含重复项并保留其原始键
  • 如何在 Doctrine 中使用 andWhere 和 orWhere ?

    WHERE a 1 AND b 1 Or b 2 AND c 1 OR c 2 我怎样才能在教义中做到这一点 q gt where a 1 q gt andWhere b 1 q gt orWhere b 2 q gt andWhere c
  • htaccess隐藏php扩展时出错,只隐藏html

    我在使用 htaccess 隐藏网站上的 php 扩展时遇到问题 我看到很多网站试图修复它 但没有任何结果 但只有 html 扩展名对我来说是隐藏的 在我的 htaccess 上 我用这个来隐藏扩展 它就在错误页面之后 这是我的 htacc
  • 致命错误:调用未定义的方法 mysqli_stmt::query()

    为什么我会收到以下错误 致命错误 调用未定义的方法 mysqli stmt query mysqli new mysqli localhost or die mysqli gt connect error function checklog
  • 使用 PHP DOMDocument 更改标签属性值

    我想用 PHP DOMDocument 更改标签属性的值 例如 假设我们有这行 HTML a href http foo bar Click here a 我将上面的代码加载到 PHP 中 如下所示 dom new domDocument
  • 如何启用 php curl 以在 php cli 中使用

    我已经在没有服务器的情况下在我的计算机上安装了 php 并使用 cli 运行它 但未启用 php curl 我不知道如何执行此操作 如果有人遇到此线程并使用 wamp 服务器 这里有一个针对上述问题的快速解决方案http forum wam
  • 我们在哪里/什么时候使用 JSON?

    你能告诉我 JSON 有什么用 在 Javascript 和 PHP 中 当我们需要 JSON 方法时 我从以下链接中阅读 但是 我没有获得有关任何项目的 JSON 实现的任何信息 http www json org js html htt
  • PHP:将数组添加在一起

    有人可以帮我解释一下吗 我有两段代码 其中一个按我的预期工作 但另一个则不然 这有效 a array a gt 1 b gt 2 b array c gt 3 c a b print r c Output Array a gt 1 b gt
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • 如何使用 PHP 中的 jQuery/AJAX 调用迭代 JSON 数组? [复制]

    这个问题在这里已经有答案了 可能的重复 循环Json对象 https stackoverflow com questions 684672 loop through json object 我有一个 PHP 函数 data php 它从外部
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • Laravel 中的支付网关回调时会话会自动销毁

    我正在尝试将 CCavenue com 支付网关集成到我的 Laravel 7 项目中 我面临的唯一问题是在回调 url 中 从支付网关获取发布数据后 活动会话会自动销毁 我还向中间件添加了 CSRF 例外 PayController 生成
  • php echo 不工作

    我的代码似乎不起作用 单选按钮出现 但旁边什么也没有 似乎 mysql fetch array 由于某种原因无法工作 因为我已经玩过代码并反复测试它以查找代码似乎遇到的位置出现问题并停止工作 有人可以告诉我出了什么问题吗 欢呼声我是新手 最
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • JQuery 验证不起作用

    我有一种表单 其中一个输入类型的值为 名字 但这可以在 onfocus 函数上更改我想验证此输入字段 如果它为空白或 名字 我有两个 jQuery 文件jquery 1 4 2 min js jquery validate pack js
  • PHP 启动:运行单元测试时无法加载动态库

    当我尝试运行单元测试时 出现此错误 PHP 警告 PHP 启动 无法加载动态库 bz2 尝试过 xampp php ext bz2 找不到指定的模块 xampp php ext php bz2 dll 找不到指定的模块 在未知的第 0 行
  • 升级到 5.4 但“php -v”仍然返回旧版本

    我使用的是 OSX Lion 10 7 5 正如建议的如何在 Mac OS X 中升级 PHP https stackoverflow com questions 2526085 how do i upgrade php in mac os

随机推荐