我是CakePHP框架的新手,正在尝试建立一个"Hello World"项目。在使用它时,当执行一个简单的DB查询时,CakePHP的响应非常慢。
以下是我所做的步骤:- 下载CakePHP框架(2.3.0 RC1)并安装
- 创建一个名为"Tests"的空表的"Test"数据库。
按如下方式编辑默认的AppController.php文件:
class AppController extends Controller { var $uses = array('Test'); function say_hello() { $this->Test->query("select * from test where id=0"); echo "hello"; } }
之后,我访问了链接"http://localhost/app/say_hello",响应时间超过15秒。
如果我将查询语句注释掉,如下所示:
class AppController extends Controller {
var $uses = array('Test');
function say_hello() {
//$this->Test->query("select * from test where id=0");
echo "hello";
}
}
然后,只需要大约60ms的响应。
这对我来说似乎不对,因为在一个空表上执行一个简单的查询不应该花费~940ms。我试过调试DebugKit,它显示ControllerAction(在这种情况下,say_hello动作非常简单)花费了超过15秒的处理时间。还请注意,缓慢问题不是由DB引起的,因为DebugKit显示,在执行say_hello动作时只有一个查询,并且该查询几乎需要0ms才能完成。
我不确定是什么原因导致这么慢。有经验的CakePHP成员能告诉我在这种情况下什么是错的吗?我还应该做些什么来排除故障并解决问题?
谢谢。
在调试模式下,CakePHP将在短时间内刷新数据库绑定、对象缓存和模式,描述映射到定义模型的表。
在测试CakePHP应用程序性能之前,确保将调试级别更改为0。
请检查您的web服务器和数据库服务器是否在同一台物理机器上。
如果它们在同一台物理机器上,所花费的时间应该更少,通常是几百毫秒,如果它们不在同一台物理机器上,那么网络延迟就会产生影响。你可以深入研究CakePHP框架的源代码,它使用PDO连接数据库并调用PDO的一些函数,由于网络延迟时间,每次都会花费相当长的时间。所以这个解决方案可能是不合适的,你应该写一个特定的API,然后你的PHP代码调用API而不是直接查询数据库。