【问题标题】:Kohana Controller Setup unexpectly slowKohana 控制器设置异常缓慢
【发布时间】:2010-03-03 04:39:33
【问题描述】:

我是一位经验丰富的 PHP 开发人员,对 kohana 不熟悉。

我用Kohana建了一个网站,但是上传到我的服务器后,我发现“控制器设置”部分异常缓慢,耗时12s,而其他不到0.5s,

Kohana Loading  0.014   1   0.49MB
Environment Setup   0.004   1   0.05MB
System Initialization   0.007   1   0.14MB
Controller Setup    12.058  1   1.42MB
ReflectionClass >newInstance()  12.054  1   1.35MB
Controller Execution    0.036   1   0.25MB
Total Execution 12.117  1   2.30MB

通过深入研究 Kohana 核心,我发现 ReflectionClass >newInstance() 导致了问题

但我不确定我应该从这里去哪里。 :(

请帮忙。谢谢


我已经深入研究了我自己的代码,看起来是它的 Session::instance() 导致了问题。 会话::instance() 12.032 1 1.03MB


为了进一步跟踪问题,我已将会话驱动程序更改为缓存,并将缓存更改为 memcache。但没有太大改善。于是我打开了session.php,找到了这个。

     /**
     * Singleton instance of Session.
     */
    public static function instance()
    {
        if (Session::$instance == NULL)
        {
            // Create a new instance
            new Session;
        }

        return Session::$instance;
    }

->“新会话;”!!

我看不出这有什么意义。我看了其他类,写成return new xxx;

【问题讨论】:

  • 您需要粘贴您的控制器代码(如果可能),以便我们查看发生了什么。另一方面,您声称自己是一位相当有经验的 PHP 开发人员,然后表明您甚至不知道单例是什么。
  • 公平地说,很多 PHP 开发人员在 PHP 4 上完成了大部分工作,因此单例对他们来说可能是一个新概念。
  • 我也遇到了类似的问题,我已将其范围缩小到 session_start() - 你还记得你是如何解决这个问题的吗?

标签: php kohana benchmarking


【解决方案1】:

就像它在 DocBlock 中所说的那样,Session 类使用Singleton pattern。单例模式确保在任何给定时间只有一个类的实例。您显示的代码没有做任何特别的事情。这是该模式的标准实现。我高度怀疑这是罪魁祸首。如果有的话,您必须查看Session::__construct

更好的方法是使用Xdebug 来分析应用程序并获取detailed listing of the execution flow。这将更清楚地说明需要这么长时间。

【讨论】:

  • 谢谢 Gordon,我现在已经追踪到 session_start() 的问题。不确定 Xdebug 是否会在 session_start 中详细介绍,我将尝试进一步调整它。毕竟这个问题从来没有发生在我的本地机器上。必须与硬件设置有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多