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 请求的延迟非常高 的相关文章

  • SplFileObject + LimitIterator + 偏移量

    我有两行数据文件 两行仅用于我的示例 实际上 该文件可以包含数百万行 并且我使用 SplFileObject 和 LimitIterator 进行偏移 但这种组合在某些情况下会有奇怪的行为 offset 0 file new SplFile
  • File_get_contents($url): 无法打开流

    我有一个脚本 我使用以下方法读取文件 file get contents urlencode url 我收到此错误 failed to open stream HTTP request failed HTTP 1 0 400 Bad req
  • 从 PHP 中的平面路径数组构建目录树

    所以 标题可能令人困惑 但我不知道如何表达这种数组结构 它肯定是一个树结构 但至于它的创建 这正是我所渴望的 它似乎不遵循典型的递归数组树构建 我正在尝试从平面路径数组创建列目录布局 每个路径都位于其自己的多维数组内 该数组旨在构建 mac
  • file_get_contents 获取 php 内容!我需要 html 中的源代码

    我正在尝试使用 file get contents 获取 php 文件的 html 内容 但我无法管理它 无论我做什么 它都需要 php 内容 所以我希望您理解并可以帮助我 脚本的代码
  • PHP:会话.auto_start

    我在同一台服务器上有两个项目 它们的设置在 session auto start 中冲突 相关post https stackoverflow com questions 1378324 php setting variables in i
  • phpstorm 和 xdebug 之间的连接

    我配置了 phpstorm xdebug 并且能够使用断点调试我的代码 这些天我更新了 php 通过brew 和 xdebug 现在我有 php 5 5 26 和 xdebug 2 3 3 当我尝试调试测试 和代码 时 phpstorm 告
  • 服务容器的使用寿命是多少?

    我正在尝试了解 Symfony2 框架 来自 Java Spring 背景 我意识到 Symfony2 中的 Scope 与 Spring 中的 Scope 不同 此外 通过 Symfony3 范围已弃用 https stackoverfl
  • PHP 资产管道/框架

    背景 我正在致力于 现代化 一个现有的 PHP 驱动的网站 该网站最初是一个带有一些 php 方法的静态网站 它现在有一个移动网络应用程序 多个模型和大量动态内容 然而 随着时间的推移 应用程序本身的结构与它主要是静态站点时相比并没有太大变
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • 如何在 PHP 中执行 shell 脚本?

    我有一个脚本 var www myscript sh它创建文件夹并运行命令svn update对于我的项目 我需要通过在浏览器中的 PHP 文件中调用它来执行此脚本 即本地主机 test php 我尝试使用函数shell exec and
  • 在 WordPress 中调用自定义 php 模板中的函数

    我想调用我在 WordPress 中编写的另一个 php 类中的函数 但是我对语法感到困惑 例如要获取页面上的标题 您只需调用 get header 等等 但是我如何调用特定类中的函数 例如 在index php中 我想调用一个名为this
  • Tomcat 7 停止接收 HTTP 请求

    我有一个Tomcat 7接收大量数据的服务器GET 要求 这种方法在一段时间内效果很好 然后突然停止工作 7 8 小时后 当它停止工作时 我收到此错误 五月 06 2015 12 47 58 AM org apache coyote htt
  • 有没有办法通过给出整数值 PHP 来获取月份名称

    您好 我正在使用 PHP 我想传递一个整数值 1 12 并获取相应的月份名称 PHP 中有没有办法做到这一点 或者我必须通过初始化月份名称数组来完成自己的操作 我想做 month name get month name 1 echo mon
  • 检查 CodeIgniter 中受影响的行数

    我正在尝试检查我的模型方法是否有任何行受到影响 如果是 则返回 true 否则返回 false 但我不知道如何获取它 class User model extends CI Model function construct parent c
  • Razorpay 支付集成 -> 我如何检测关闭按钮 X 附近的 razorpay 模型

    我在 CI 框架中使用 Razorpay 当用户在没有付款的情况下关闭时 创建 razor 支付模型 然后对于取消订单 我希望通过状态更改为已取消来触发查询 那么我怎样才能检测到这一点 我已经在使用 by click jQuery 点击关闭
  • 访问php数组内部[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个像这样的数组打印 array 2 systems gt array 5 1 gt string 1 1111 2
  • Php mod_rewrite 无法正常工作

    我有一个带有以下链接结构的 php 页面 http localhost wisper businesspage php profile creativeartbd 所以我尝试将此链接转换为以下样式 http localhost wisper
  • PHP 中的舍入

    a 0 1 0 7 10 int 0 1 0 7 10 PHP 返回 false 有人能给我解释一下 为什么会发生这种情况吗 第一个返回 8 第二个返回 7 引用PHP 浮点精度手册中的大红色警告 http de3 php net manu
  • JSON 编码和大引号

    我在 PHP 5 的本机实现中遇到了一个有趣的行为json encode 显然 当将对象序列化为 json 字符串时 编码器将清空包含 卷曲 引号的字符串的任何属性 这种类型可能会在启用自动转换的情况下从 MS Word 文档中复制粘贴 这
  • Codeigniter,为MySQL创建表和用户

    我想以编程方式使用 CI 创建数据库和用户 到目前为止 我有这 2 个简单的 MySQL 语句 CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8 general c

随机推荐