Symfony2性能调整?

时间:2011-12-12 16:23:00

标签: symfony doctrine-orm

有人对Symfony2有任何性能提示,例如“使用 _”,“禁用_ ”等?像缓存这样的东西,但不太明显的事情,如使用Doctrine2查询缓存。

1 个答案:

答案 0 :(得分:13)

Doctrine Docs中的一些(相当基本的)事物

使用数组水合作用进行只读操作

与保湿物体相关的额外开销(内存,加载代理等)。

如果您只是显示单个项目的项目列表或实体属性列表(例如产品页面,最近博客文章列表或大多数前端操作!),您可以使用 $query->getResult(Query::HYDRATE_ARRAY);

这种方法还可以防止下一点可能出现的意外延迟加载问题(由于缺少代理!)

在使用具有关联的实体时要小心延迟加载

过度使用Doctrine的一些内置存储库方法$repo->findAll()或者不在DQL中明确定义关联(通过连接)(为了简洁/速度/无论借口!)。

如果查询返回一个(例如Article)对象的数组,那么您在视图中循环以显示每篇文章,并且每篇文章都有一组注释。如果您没有定义Eager加载,或者在DQL中显式加入注释实体,则Doctrine将根据请求在注释实体中延迟加载(在某些情况下这非常有用)。这意味着每个延迟加载需要额外的SQL查询。

如果您正在显示10篇文章的列表,那么将导致1个查询以获取文章列表,另外10个查询将延迟加载每个评论关联(当只需要一个查询时!)

默认情况下,Doctrine将获取给定实体的所有属性。

这在高流量网页上并不理想(相当于做SELECT *?)。特别是如果您只为给定实体使用1或2个属性。

而不是

$qb->select('Article')
       ->from('SomeBundle:Article');

你可以做到

$qb->select('Article.title')
       ->from('SomeBundle:Article');

您可以使用Symfony的分析器来关注Doctrine生成的查询数量。