1

我是 CakePHP 框架的新手,正在尝试设置一个“Hello World”项目。在处理它时,我在执行简单的数据库查询时遇到了来自 CakePHP 的非常缓慢的响应。

以下是我已完成的步骤:

  1. 下载 CakePHP 框架 (2.3.0 RC1) 并进行设置
  2. 使用名为“Tests”的空表创建一个“Test”数据库。
  3. 编辑默认的 AppController.php 文件,如下所示:

    class AppController extends Controller {
    
        var $uses = array('Test');
    
        function say_hello() {
        $this->Test->query("select * from test where id=0");
        echo "hello";
        }
    }
    
  4. 之后,我访问了链接“http://localhost/app/say_hello”,响应时间超过 1s。

如果我将查询语句注释如下:

class AppController extends Controller {

    var $uses = array('Test');

    function say_hello() {
        //$this->Test->query("select * from test where id=0");
        echo "hello";
    }
}

然后,只用了大约 60ms 的响应时间。

这对我来说似乎不正确,因为对空表执行简单查询不应该花费 ~ 940 毫秒。我尝试使用 DebugKit 进行调试,结果表明 ControllerAction(在这种情况下,say_hello 操作非常简单)占用了超过 1 秒的处理时间。另请注意,缓慢问题不是由 DB 引起的,因为 DebugKit 显示在执行 say_hello 操作时只有一个查询,并且该查询几乎需要 0 毫秒才能完成。

我不确定是什么导致了这种缓慢。任何有经验的 CakePHP 成员可以告诉我在这种情况下出了什么问题吗?我还应该做些什么来解决和解决问题?

谢谢。

4

2 回答 2

7

在调试模式下,CakePHP 将在短时间内刷新您的数据库绑定、对象缓存和模式,描述映射到定义模型的表。

在测试 CakePHP 应用程序性能之前,请确保将调试级别更改为 0。

于 2013-01-15T19:54:28.100 回答
0

请检查您的网络服务器和数据库服务器是否在同一台物理机器上。
如果它们在同一台物理机上,则花费的时间应该更少,通常为几百毫秒。如果它们不在同一台物理机上,那么网络延迟就会很重要。大家可以深入了解 CakePHP 框架的源码,它使用 PDO 连接数据库并调用 PDO 的一些函数,由于网络延迟时间,每次都需要相当长的时间。所以这个解决方案可能不合适,你应该编写一个特定的 API,然后你的 PHP 代码调用 API 而不是直接查询数据库。

于 2016-11-24T07:51:02.210 回答