0

根据 New Relic 报告,大约 70% 的时间用于处理CInlineAction::runWithParams. 事实上,Controller::action()它只花费了不到总时间的 20%。

起初我认为这可能是因为使用urlManager重写请求而不是网络服务器所以我让重写部分由网络服务器处理并urlManager在我的配置文件中禁用了整个配置。

根据 Xdebug 提供的信息,仍然没有太大区别。

只是想问一下是否CInlineAction::runWithParams需要这么多的过程是自然的,还是配置有问题。

谢谢。

4

1 回答 1

1

尽管我无法真正说出为什么 New Relic 报告在该方法上花费了这么多时间,但我认为您的配置没有问题。Yii 将为CInlineAction每次调用内联动作创建一个新对象(即,将控制器内联定义为action...函数的动作,因此得名)。然后runWithParams调用 then 来运行当前请求的操作。

因此,您很自然会看到对该方法的许多调用。该方法内部唯一可疑的是反射用于实际调用控制器方法。但这不应该对执行时间产生如此大的影响。所以我可能会把它归咎于 New Relic 的测量方式。

如果你真的想找到它,你可以echo microtime()在该方法的每一行之前添加一些,以找出循环的去向。

于 2013-04-14T20:10:41.790 回答