Ответ 1
Золотое правило
Первое, что нужно сделать, когда вы сталкиваетесь (или ожидаете столкнуться) с давлением памяти: не читает массивные объемы данных в памяти сразу, если вы собираетесь последовательно их обрабатывать.
Примеры:
- Не извлекайте большой массив результатов в память как массив; вместо этого выберете каждую строку по очереди и обработайте ее перед тем, как выбрать следующий
- Не читайте большие текстовые файлы в памяти (например,
file
); вместо этого читайте по одной строке за раз
Это не всегда самая удобная вещь в PHP (массивы не сокращают ее, и есть много кода, который работает только на массивах), но в последних версиях и особенно после введения generators проще, чем когда-либо, передавать ваши данные, а не разбивать их.
После этой практики религиозно "автоматически" позаботится о других вещах для вас:
- Больше нет необходимости очищать ресурсы с большим объемом памяти, закрывая их и теряя при этом все ссылки на них, потому что таких ресурсов не будет, начиная с
- Теперь вам больше не нужно удалять большие переменные после того, как вы с ними поработали, потому что таких переменных не будет.
Другие вещи, чтобы сделать
- Будьте осторожны при создании замыканий внутри петель; это должно быть легко сделать, поскольку создание таких внутренних петель - плохой запах кода. Вы всегда можете поднять закрытие вверх и дать ему больше параметров.
- Когда вы ожидаете массивного ввода, соответствующим образом создавайте свою программу и выбирайте алгоритмы. Например, вы можете объединять любое количество текстовых файлов любого размера, используя постоянный объем памяти.