zoukankan      html  css  js  c++  java
  • PHP的生成器yield处理大量数据杠杠

    官方解释yield

    yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。

    生成器的核心是一个yield关键字,一个生成器函数看起来像一个普通的函数,不同的是:普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值。生成器函数被调用时,返回的是一个可以被遍历的对象。

    yield和return有点类似,不过不同的是,return会返回值并且终止代码的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。

    这里顺便给大家介绍一下php版本的非缓冲查询

    意思即是 把数据一行行 读取到php运行内存,并非一次性读取到php运行内存,众所周知,php有很多内置函数,可以帮助我们对数据进行加工操作,因为数据都在内存里面,所以能操作,但是php的运行内存是有极限,默认128M。

    注意:因为非缓冲查询是 会长时间连接数据库的,有可能会造成慢查询、锁表之类的情况,比较耗mysql资源

    相对非缓冲查询就是 缓冲查询:
    如果用缓存查询,php内存就会直接爆了,出现内存不足的情况。好了,这里主要是为了突出yield

    yield性能

    生成器会对PHP应用的性能有非常大的影响

    PHP代码运行时节省大量的内存

    比较适合计算大量的数据

    yield运用

    生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组,那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。

    相信坚持的力量,日复一日的习惯.
  • 相关阅读:
    我国主机遭境外控制激增近80%
    NSOperation 详解
    NSOperation 详解
    Bitmap的recycle问题
    Bitmap的recycle问题
    NSDate 格式化含有毫秒
    NSDate 格式化含有毫秒
    CSS长度单位:px和pt的区别
    CSS长度单位:px和pt的区别
    Object-c学习笔记十八-----NSPredicate
  • 原文地址:https://www.cnblogs.com/pansidong/p/15739878.html
Copyright © 2011-2022 走看看