symfony2.3服务,控制器,控制器作为服务的性能提示

时间:2013-12-03 12:32:22

标签: php performance symfony service

在服务,控制器作为服务或使用某种辅助对象来完成工作之间的性能方面有哪些主要区别?

更精确地针对此场景/用例:

我在mysite/api上有一个 API ,我的问题是:

控制器定义为服务 服务 本身或在经典方式“作为 控制器 完成所有工作,至少有一个辅助对象(作为迷你库)来完成大部分工作?< / p>

  

辅助对象我的意思是使用一个类的istance,我想每次调用api时,都会创建一个新对象(对于我认为的性能不太好)。

感谢你的答案。

2 个答案:

答案 0 :(得分:1)

不存在任何重大的性能差异,并且所有这三种方法都是绝对有效的,这对您的用例非常重要。

需要注意的是:控制器基本上是服务,它们在Symfony中默认只是容器感知(使它们成为服务定位器)。无论控制器是Service,ContainerAwareInterface对象还是您创建的某个对象,无论是还是都可以实例化。

也就是说,控制器只是可能在每个请求上创建的数百个(如果不是数千个)对象中的一个,实例化它所需的时间实际上可以忽略不计。

使用最适合您的方法。

修改

地狱,symfony控制器默认情况下甚至不是ContainerAware,它们只是在他们的示例中这样做,因为它们总是扩展Symfony\Bundle\FrameworkBundle\Controller\Controller。您可以尝试创建Controller类,如下所示:

<?php

namespace MyVendor\MyBundle\Controller;

class MyCustomController
{
    public function myAction()
    {
        // do your thing here
    }
}

它会正常工作。

以下是实例化控制器的Symfony代码:ControllerResolver::createController

基本上,它会检查字符串是否匹配“Bundle”模式或“Service”模式。如果两者都没有,它只是将它视为'ClassName :: methodName',并以某种方式:实例化它。

答案 1 :(得分:1)

使用哪种方法没有区别。但是还有很多其他问题 - 休息api路由,格式,文档等。 使用就绪解决方案rest-api gimler/symfony-rest-edition