iGuanA
(Gushing)
1
我在首页会很多个ar的请求。热门文章、最新文章、编辑推荐、最新评论的文章。。。。
我把这些通过 model()->findAll()的结果放在一个数组里。
然后把这个数组var_dump了一下,这些数据高达1.06M。这是不是太耗内存了?
页面上全是密密麻麻的数据表结构,如果关联关系复杂点的,会更多。
我光var_dump(yii::app()->db) 就有5000多行的数据。
这样的db操作这么耗内存,敢用么?谁能消除我这个担心?多谢
AcitveRecord ,只能玩一玩开拓眼界. 真要生产环境用, 就不行!
penglu3000
(Beihuiguixian)
3
使用框架提高开发效率ar起很大作用,要是不用岂不是mvc里面的m残废了?强哥来解惑一下
iGuanA
(Gushing)
4
嗯,开发效率是立竿见影的。但是背后的性能问题不能回避。今天还跟一个使用yii做项目的朋友聊,他也在抱怨内存的问题。
难道一个框架只能当学AR的教案使用。一到实际的项目,尤其是稍微复杂点的项目就会水土不服。
qiang
(Qiang Xue)
5
你的结论有点想当然了。建议你仔细做profiling来验证。事实上,AR已经被成功应用在若干大流量的网站上了。
你不能用var_dump()来估计AR的内存开销。var_dump会把所有被reference到的对象都dump出来,包括application,以及所有的application component,因为它们都被AR间接reference到了。
AR额外的内存开销是存储10个左右变量的开销。如果按20字节来估算,额外的开销是200字节,这样在1000个AR对象情况下,额外的内存开销为200KB。这个对几乎所有的web应用而言应该不是问题。
如果你需要装载更多的数据,建议你使用DAO。
另外,对于任何大流量的web应用而言,cache都是必须的。cache可以帮助解决绝大多数的性能瓶颈。
iGuanA
(Gushing)
6
赞。
很专业的回复,我确实没有做过性能方面的测试。也对var_dump本身的实现不是很了解。
多谢qiang.
Leric
(Leric Zhang)
8
只有AR里定义的对象变量才会占用多余的内存,按qiang的意思,应该是有大约10个这样的成员变量。
而var_dump出来的结果里,大部分是到别的对象的reference,或者是静态变量,这些东西打印出来很多,其实内存占用上并没有什么影响。
starsw001
(Starsw001)
12
楼上算的还真仔细。。。不过就是不知道对于一个访问量上千万的网站来说。是不是有点性能问题?