Есть совет? Не надо.
Позвольте мне уточнить, вы пытаетесь загрузить более 40 000 сообщений в память. Каждый заголовок, html блок контента, et c et c загружается. Это (почти?) Гарантированно прожигает все имеющиеся у вас ресурсы сервера.
В зависимости от того, что вы на самом деле делаете в while
, l oop, вы можете рассмотреть возможность сделать это в чанки / партии. PHP является однопоточным по умолчанию, поэтому он будет продолжаться до oop как один выполненный процесс. Это означает, что вы можете набрать 100 сообщений, а затем выполнить новый запрос на следующие 100, когда это будет сделано.
Если вы изменяете сообщения, рассмотрите возможность использования SQL вместо этого, это может быть гораздо эффективнее, чем работа с PHP и WordPress. Если это невозможно, рассмотрите возможность использования аргумента 'fields' => 'ids'
, доступного в WP_Query
, поэтому вы извлекаете в память только идентификаторы сообщений, а не весь контент.
Если вы ' повторно отображать сообщения, рассмотрите возможность использования атрибута paged
и загрузки только 100 или чего-либо еще, что имеет смысл в вашем контексте, и используйте AJAX или нумерацию страниц, чтобы загружать больше, когда они необходимы.
В противном случае, расширение на Во-первых, замените posts_per_page
на 100
и запросите его в блоках внутри for
l oop, используя аргумент offset
, чтобы изменить количество сообщений в l oop.
for( $i = 0; $i < 1000; $i++ ){
$offset = 100 * $i;
$args = array('post_type' => 'zip_codes', 'posts_per_page' => 100, 'offset' => $offset );
$query = new WP_Query($args);
if( $query->have_posts(){
while( $query->have_posts() ){ /* Do the thing */ }
} else {
break; // We ran out of posts, stop doing the `for` loop.
}
}
В любом случае, без фактического пакетирования, в зависимости от того, что вы делаете, и как вы порождаете это (порожденный как процесс из cron, это не будет зависеть от те же ограничения, что и для HTTP-запроса, например), это будет интенсивно и будет облагаться налогом на ваши ресурсы, в частности на память, использование ЦП и вашу директиву max_execution_time
.