Phalcon 使用 PhalconHttpResponse();时速度非常慢


Phalcon very slow using PhalconHttpResponse();

我在Phalcon上遇到了一个非常奇怪的问题。
每当我在控制器中使用Response时,框架都会变得非常慢。这是我的简单控制器:

<?php
// file: app/controllers/TestController.php
use Phalcon'Mvc'View;
class TestController extends ControllerBase
{
 private $response;
 public function initialize()
 {
  $this->view->setRenderLevel(View::LEVEL_NO_RENDER);
  $this->response = new Phalcon'Http'Response();
  $this->response->setStatusCode(200, "OK");
 }
 public function indexAction()
 {
   $this->response->setContent("phalcon")->send(); // very slow
 }
}

每当我使用new Phalcon'Http'Response(); Phalcon都会变得非常慢。例如,使用以下命令进行测试:

ab -c 50 -n 100 ...

请求/秒:10

如果我使用空白控制器,我会得到

请求/秒:1000+

路线是:

<?php
//file: app/config/routes.php
$router = new 'Phalcon'Mvc'Router();
$router->add("/:controller/:action", array("controller" => "test", "action" => "index"));

我在 AWS 上对其进行了测试:

c4.large
PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11)
2 cpu - 3.75gb ram
Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.6

我们在装有osx 10.10.1的Macbook Pro上经历了相同的行为

问题是当我在响应上调用 send() 方法时:

$this->response->send(); // slows down everything

注意

正如@Phate01所建议的,我尝试了return $response;而不是$response->send();,但它仍然很慢

我去了这个页面:http://docs.phalconphp.com/en/latest/reference/response.html他们说

如果您使用的是完整的 MVC 堆栈,则无需手动创建响应。但是,如果需要直接从控制器的操作返回响应,请遵循以下示例:

<?php
class FeedController extends Phalcon'Mvc'Controller
{
    public function getAction()
    {
        // Getting a response instance
        $response = new 'Phalcon'Http'Response();
        $feed = //.. load here the feed
        //Set the content of the response
        $response->setContent($feed->asString());
        //Return the response
        return $response;
    }
}
?>

如您所见,它直接返回Response对象。

我想您应该在控制器外部调用->send(),并且添加一些标头会有所帮助