主义2极端优化

Son*_*ngo 7 php performance zend-framework doctrine-orm

我目前正在使用Zend framework 1.11.11和Doctrine 2.2构建一个Web应用程序.我搜索了很多优化所用框架的最佳方法和黑客.

在我搜索Zend框架优化期间,我偶然发现了这篇文章: 优化Zend框架

有趣的是,它提到了一些从框架本身的使用中产生的优化技术,并没有在手册中涵盖,例如:

  • 禁用viewRenderer并自己处理视图渲染.

现在我正在寻找可以应用于Doctrine 2的类似技术,而不是手册中提到的那些.

注意

我知道很多人会提到分析查询,缓存和找到应用程序的瓶颈,但这不是你在寻找:)我正在寻找在Doctrine 2使用过程中发现的实用增强功能.

谢谢 ;)

Bor*_*éry 11

好吧,优化和黑客攻击Doctrine 2并不是一件容易的事.我只能建议你遵循官方的"最佳实践":

  • 使用查询缓存
  • 使用元数据缓存
  • 预生成代理
  • 避免使用侦听器(或按事件类型(flush,update)合并它们,它将避免查找时间和订阅事件的循环)
  • 尽可能使用延迟加载
  • 确保你的关系或继承没有搞砸

(注意,我没有提到结果缓存,这应该是优化应用程序的方法)

从我的使用来看,我必须优化的最重要部分不是Doctrine本身(虽然对核心有优化)但生成的Query一如既往地EXPLAIN编写了查询和优化索引.

原则2可以是高消耗内存,以便一次可申请减缓加载了很多实体的,你可能会发现它有用知道关于clear(),detach(),iterate()的方法.

尽管Doctrine 2有时可能很慢,但我大多注意到我能够在Zend Framework或PHP本身内的其他地方优化应用程序.

让我们说,Doctrine 2需要100ms,其中Zend Framework需要300ms,总共450ms(I/O内容,PHP内部函数等).

如果你可以轻松地将Zend Framework所花费的时间除以2,那么将Doctrine 2优化为10%将不会显着提高应用程序的速度.想想两次.

以下是一些提示:

  • 创建自己的视图而不是使用View Helpers(避免帮助程序查找)
  • 缓存你的Zend_Config对象(非常重负载)
  • 尽可能避免使用Regex路由(ZF路由是一个很大的瓶颈)
  • 使用ClassMap自动加载器而不是本机Zend_Loader_Autoloader

有很多优化要做,有些有真正的影响而有些则没有.

确保通过分析您的应用程序来找到它们,一个简单的跨平台就是使用webgrind.