2013-11-21 127 views
4

,当我用雄辩来获取数据,并发现了一些性能问题Laravel雄辩的性能问题

就我而言,我使用laravel debugbar(https://github.com/barryvdh/laravel-debugbar)收集我需要的信息。

当我使用ORM从我的数据库获取约20项

$projects = Project::where('status', '=', 2)->get(); 

花了大约24MB的内存使用情况和250ms的

但是当我使用查询生成器,如下

$projects = DB::table('Project')->where('status','=',2)->get(); 

数据库查询和返回数据几乎相同,但查询构建器只用了11MB的内存使用量和113ms的数据量。

,当我需要的条目约200项,甚至涉及到通过ORM其他表,它需要差不多8000MS ......并获得“允许的内存大小耗尽”往往错误信息..

所以,我想知道,在我的情况下,我应该使用查询生成器并加入其他表?

或者我应该怎么做才能加快Eloquent的表现?

回答

3

最后我发现问题在哪里。 实际上,这个问题并非真正由雄辩的ORM造​​成的,而是由视图造成的。 那是什么我做了固定的问题

  • 预先加载: 由于在我看来4间的关系,所以导致N + 4次的查询,我用的是预先加载到固定它。并使用

  • 缓存: 我使用remember()来缓存结果。

  • 取消图像检查: 我做的最后一件事情,但最重要的是取消检查S3中的图像。

页面加载得到了巨大的加速。 :)

2

只是一个想法,你可能需要禁用查询日志记录:

DB::connection()->disableQueryLog() 

和使用缓存:http://four.laravel.com/docs/cache

如果没有显著差异则是,你pobably只需要使用查询生成器,甚至基本的:

DB::select(//your query here...)