当前位置: 首页 > news >正文

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里运行会是什么结果,大家可以拿代码去进行测试.🙃

相关文章:

  • div盒子边距_CSS | 盒子模型之外边距(margin)
  • php mongodb 按照日期统计_PHP程序员应该掌握哪些技术?
  • 图片在section上下居中_停!你的时间不应该花在无谓的图片/文字对齐上
  • python小课堂28_python课堂整理28----re模块
  • fabric shim安装合约_Fabric 2.0 实战 - 设置背书策略
  • springboot 单测加入参数_SpringBoot加Lambda进行参数校验的一个通用方案
  • java 炸金花_炸金花绝对大小计算 比较及排序算法(Java)
  • ios请求头解决参数中文乱码_vue Axios 向后端提交参数 请求头 json 方式(Content-Type: application/json; charset=UTF-8)...
  • three相机在模型上_javascript – Three.js围绕物体旋转相机(可能会移动)
  • ominipeek 发包_WildPackets的著名的抓包软件Omnipeek
  • 负压电路_负压设计技巧:单片机电子电路中常用的负压产生电路!
  • centos7 开启ipv6_(CentOS7)配置IPv6隧道地址
  • redis 了 什么地方用到_为什么这么多人在用Redis
  • 阿里云服务器跑python_python 服务器跑
  • combotree 可以异步加载吗_combotree怎么设置默认值
  • [nginx文档翻译系列] 控制nginx
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]前端离线指南(上)
  • CentOS从零开始部署Nodejs项目
  • conda常用的命令
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS中外联样式表代表的含义
  • Django 博客开发教程 16 - 统计文章阅读量
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • java2019面试题北京
  • JavaScript服务器推送技术之 WebSocket
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Python爬虫--- 1.3 BS4库的解析器
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 将 Measurements 和 Units 应用到物理学
  • 微服务核心架构梳理
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 正则表达式小结
  • (0)Nginx 功能特性
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (function(){})()的分步解析
  • (pytorch进阶之路)扩散概率模型
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)激光线扫描-三维重建
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)c++ std::pair 与 std::make
  • (转)我也是一只IT小小鸟
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Framework杂记
  • .net的socket示例
  • .net连接oracle数据库
  • ?
  • [20140403]查询是否产生日志
  • [Hibernate] - Fetching strategies
  • [HTML API]HTMLCollection