yii2 batch和each的區(qū)別是什么

yii2 batch和each的區(qū)別是什么

我們的數(shù)據(jù)庫常常都是很龐大的,一次查詢的結(jié)果集也很大,這樣很浪費內(nèi)存,為了降低內(nèi)存的使用率,我們可以使用yii2的batch和each方法。

為了讓大家看的更明白,我們模擬一個場景,然后通過yii2的debug來查看all與batch/each方法下的內(nèi)存使用情況。

開始準備

我們先建立一張表,它很簡單。

yii2 batch和each的區(qū)別是什么

你看到了,它有主鍵id、會員名username、所在省province,現(xiàn)在它是空的。

然后,我們執(zhí)行了一個循環(huán)

set_time_limit(0); for($i=1;$idb->createCommand()->insert("user",[ ????????'username'=>'abei'.$i, ????????'province'=>'北京市' ????])->execute(); }

執(zhí)行后,你知道我們的數(shù)據(jù)庫里有10000條記錄了,現(xiàn)在我們開始對比。

對比

為了方便,我們在視圖里直接寫循環(huán)體,如下面代碼,你一定可以看懂。

$query?=?new?yiidbQuery(); $query-&gt;from('user'); foreach($query-&gt;all()?as?$user){ ????echo?$user['username']; ????echo?"<br>"; }

結(jié)果那?

yii2 batch和each的區(qū)別是什么

占有內(nèi)存 15.306MB

OK,現(xiàn)在開始看看batch和each的戲法,到底有沒有節(jié)省內(nèi)存。

$query?=?new?yiidbQuery(); $query-&gt;from('user'); foreach($query-&gt;batch()?as?$users){ ????????foreach($users?as?$user){ ????????echo?$user['username']; ????????echo?"<br>"; ????} }

結(jié)果那?

yii2 batch和each的區(qū)別是什么

果然,節(jié)省了一半的內(nèi)存。現(xiàn)在僅僅占用了8.077MB

同樣的

$query?=?new?yiidbQuery(); $query-&gt;from('user'); foreach($query-&gt;each()?as?$user){ ????echo?$user['username']; ????echo?"<br>"; }

each的表現(xiàn)也相當不錯

yii2 batch和each的區(qū)別是什么

結(jié)果

當我們遇到需要一次讀取出所有的或是大批量數(shù)據(jù)的時候,可以考慮使用batch和each,這一點點代碼的優(yōu)化幫你省掉了一半的內(nèi)存。

PHP中文網(wǎng),有大量免費的Yii入門教程,歡迎大家學習!

以上就是yii2 batch和each的

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊5 分享