Когда я впервые написал Python, я был знаком с оптимизацией производительности памяти генераторов, но многие PHP-разработчики могут не знать функции генераторов, возможно, потому, что генераторы — это функция, представленная в PHP 5.5, или они могут использоваться генераторами. . Однако функция генератора действительно полезна. Недавно пишу импорт и экспорт csv, и мне нужно обработать большой объем данных.Я подумал о генераторе PHP, и напишу резюме.
преимущество
Каковы преимущества генераторов, а именно:
- Генераторы могут оказать огромное влияние на производительность приложения PHP.
- Экономьте много памяти при запуске PHP-кода
- Больше подходит для обработки больших объемов данных
Введение концепции
Во-первых, давайте отбросим бремя концепции генератора и посмотрим на простую функцию PHP:
function rangeNum($num){
$data = [];
for($i=0;$i<$num;$i++){
$data[] = time();
}
return $data;
}
Это очень простая функция PHP, которую мы часто используем при работе с некоторой логикой массива. Код здесь тоже очень простой.
Давайте напишем еще одну функцию для получения данных в $data
$data = rangeNum(10);
foreach($data as $value){
sleep(1);
echo $value.'<br />';
}
Здесь все идеально, никаких проблем.
считать:
Когда мы передаем 1000w или более при вызове функции, то при вызове функции цикл for 1000w раз. Данные 1000w в $data сохраняются в памяти, что займет много памяти при вызове функции
Создать генератор
Мы напрямую модифицируем функцию
function rangeNum($num){
for($i=0;$i<$num;$i++){
yield time();
}
}
использовать генератор
$data = rangeNum(10);
foreach($data as $value){
sleep(1);
echo $value.'<br />';
}
На этом этапе вы должны иметь представление о генераторах.
концептуальное понимание
Сначала проясните концепцию: ключевое слово yield генератора не является возвращаемым значением, его технический термин называется выходным значением, просто сгенерируйте значение
актуальное приложение для разработки
Чтение больших файлов
Разработчикам PHP часто приходится читать большие файлы, такие как файлы csv, файлы excel или некоторые файлы журналов. Если эти файлы очень большие, например 20 G. В настоящее время нереально напрямую считывать весь контент в память для обработки за один раз.
миллионы посещений
Генератор доходности появился после php5.5.Yield обеспечивает более простой способ реализации простых итерационных объектов.По сравнению с тем, как классы реализуют интерфейс Iterator, накладные расходы на производительность и сложность значительно снижены.
конец статьи
Все статьи написаны оригинальным почерком, если есть какие-либо ошибки, пожалуйста, укажите.