Dam*_*che 0 symfony doctrine-orm
任何人都有Symfony2的任何性能提示,如"使用_","禁用_ "等?像缓存这样的东西,但不太明显的事情,如使用Doctrine2查询缓存.
Pet*_*ell 13
来自Doctrine Docs的几个(相当基本的)事物
存在与保湿物体相关的额外开销(存储器,加载代理等).
如果您只是显示单个项目的项目列表或实体属性列表(例如产品页面,最近的博客文章列表或大多数前端操作!),您可以使用
$query->getResult(Query::HYDRATE_ARRAY);
这种方法还可以防止下一点可能出现的任何意外延迟加载问题(由于缺少代理!)
过度使用Doctrine的一些内置存储库方法$repo->findAll(),或者没有在DQL中明确定义关联(通过连接)(为了简洁/速度/无论借口!),这很诱人.
如果查询返回一个(例如文章)对象的数组,那么您在视图中循环以显示每篇文章,并且每篇文章都有一组注释.如果您没有定义Eager加载,或者在DQL中显式加入注释实体,则Doctrine会根据请求在注释实体中延迟加载(这在某些情况下非常有用).这意味着每个延迟加载需要额外的SQL查询.
如果您正在显示10篇文章的列表,那么将导致1个查询以获取文章列表,另外10个查询将延迟加载每个注释关联(当只需要一个查询时!)
这在高流量页面上并不理想(相当于做一个SELECT *?).特别是如果您仅为给定实体使用1或2个属性.
而不是
$qb->select('Article')
->from('SomeBundle:Article');
Run Code Online (Sandbox Code Playgroud)
你可以做到
$qb->select('Article.title')
->from('SomeBundle:Article');
Run Code Online (Sandbox Code Playgroud)
您可以使用Symfony的分析器来关注Doctrine生成的查询数量.