php yield定义生成器,加快foreach、for等循环速度

yield关键字用于定义生成器函数。生成器函数可以一次生成一个值,并在每次生成值后暂停其执行,直到请求下一个值。这使得生成器可以有效地处理大量数据或无限数据流

不使用yield 使用yield
执行方式 函数会立即执行,并一次性返回所有结果。函数执行过程中可能占用较多的内存 函数不会立即执行完毕,而是返回一个对象。每次调用对象的迭代器方法时,函数才会继续执行一段代码,并生成一个值,然后暂停执行,等待下一次迭代请求
返回结果 函数会返回一个数组、字符串、对象等值,包含所有生成的结果 函数返回一个对象,通过迭代对象可以逐个获取生成的值。不会一次性生成所有结果,只会按需生成。 使用yield关键字可以实现按需生成值,避免一次性生成所有结果,从而节省内存并提高性能
速度相差 下面案例   0.0246617794秒  下面案例    0.0000009537秒

1、不使用yield

2、使用yield

function generateNumbers() {
    for ($i = 1; $i <= 1000000; $i++) {
        yield $i;
    }
}
$start = microtime(true); // 记录开始时间
$generator = generateNumbers();
$end = microtime(true); // 记录结束时间
$time1 =number_format($end - $start, 10);  // 计算运行时间

echo "使用yield: \n运行时间: " . $time1 . "秒\n";

php yield定义生成器,加快foreach、for等循环速度_第1张图片

 使用yield的函数必须使用迭代器方法(如foreach循环)来遍历生成的值,否则函数中的代码不会被执行。

你可能感兴趣的:(乱七八糟,php,php,笔记,开发语言)