php yield 个人小解_php 新特性之yield大数组处理优化

场景: 处理大数组的时候,比如循环更新数据或者导出订单数据到excel文件,普通方式可能会引起"Allowed memory size of  XXXXX bytes exhausted" 错误,而yield方式可以节省很多内存,就不会有这个问题啦!!!

代码环境: MacOs / php7.1.3 / 8G ram

/**

* Created by PhpStorm.

* User: lf

* Date: 2017/3/30

* Time: 15:55

*/

$t1 = microtime(true);

//common 方式

class common_data

{

function data()

{

$array = [];

for ($i = 1; $i <= 1000000; $i++) {

$array[] = 'item_' . $i;

}

return $array;

}

function callback($param)

{

// echo $param;

return $param;

}

}

//yield 方式

class yield_data

{

function data()

{

for ($i = 1; $i <= 1000000; $i++) {

$array = 'item_' . $i;

yield $array;

}

}

function callback($param)

{

// echo $param;

return $param;

}

}

//$commn = new common_data();

//$data= $commn->data();

//foreach ($data as $value) {

// $commn->callback($value);

//}

$yield = new yield_data();

$data = $yield->data();

foreach ($data as $value) {

$yield->callback($value);

}

$t2 = microtime(true);

echo '耗时' . round($t2 - $t1, 7) . '秒
';

echo '内存: ' . memory_get_usage() / 1024 . 'K
';

结果:

yield 方式  :

耗时0.184339秒

内存: 349.984375K

common 方式:

耗时0.1598852秒

内存: 72183.375K 72MB!!!!

可见两者之间的内存占用差距是相当的大啊!!

同时,yield方式相对会耗时一丢丢,但差距不是很大.不知道在低版本的php里运行会是什么结果,大家可以拿代码去进行测试.🙃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值