我一直致力于将我的应用程序从CodeIgniter转换为Phalcon.我注意到使用CI只需要花费最多3或4秒的[查询重量级]请求,使用Phalcon需要30秒才能完成!
我花了好几天试图找到解决方案.我尝试使用框架提供的所有不同访问方式,包括直接向Phalcon的MySql PDO适配器提交原始查询字符串.
我正在将我的数据库连接添加到服务容器,就像Phalcon的INVO教程中显示的那样:
$di->set('db',function() use ($config) {
return new \Phalcon\Db\Adapter\Pdo\MysqL(array(
"host" => $config->database->host,"username" => $config->database->username,"password" => $config->database->password,"dbname" => $config->database->name
));
});
最佳答案
我发现了这个问题,对我来说并不是很明显,所以希望其他人也会觉得这个问题很有用.
原文链接:https://www.f2er.com/mysql/434030.html每次启动新查询时,应用程序都会获得数据库适配器的新实例.产生上述webgrind输出的请求总共有20个查询.
在重新阅读Phalcon关于依赖注入的文档部分时,我发现服务可以选择作为“共享”服务添加到服务容器中,这有效地强制对象充当单例,这意味着一旦创建了一个类的实例,应用程序将简单地将该实例传递给任何请求,而不是创建新实例.
有几种方法可以强制将服务添加为共享服务,详细信息可以在Phalcon的文档中找到:
http://docs.phalconphp.com/en/latest/reference/di.html#shared-services
$di->setShared('db',"dbname" => $config->database->name
));
});
以下是上面引用的相同查询的webgrind输出,但是在将数据库服务设置为共享服务(成本以毫秒为单位)之后:
请注意,调用计数现在是1而不是20,调用成本从20秒下降到1秒!
我希望别人觉得这很有用!