Сократите использование памяти PHP при просмотре всех продуктов в WooCommerce / Wordpress с LiteSpeed - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над плагином для WooCommerce, который создает XML-файл, содержащий все товары из магазина. Следующий код используется для получения всех продуктов, который в большинстве случаев работает нормально.

$args = array(
    'status' => array( 'publish' ),
    'type'.  => array( 'simple', 'variable', 'bundle', 'composite' ),
    'offset' => $this->offset,
    'limit'  => $this->chunk_size,
);
$products = wc_get_products( $args );

while ( count( $products ) ) {
    foreach ( $products as $product ) {
        $output .= $this->render_entry( $product );
    }

    if ( ! wp_using_ext_object_cache() ) {
        wp_cache_flush();
    }

    $args['offset'] += $this->chunk_size;
    $products = wc_get_products( $args );
}

Даже в магазине с более чем 20 000 товаров это прекрасно работает. Однако, когда это хранилище также использует LiteSpeed ​​Cache , использование памяти будет увеличиваться с каждым циклом while и приведет к:

Неустранимая ошибка PHP: исчерпан объем памяти, равный 1073741824 байт

  • Предел памяти 1024M
  • Кэш не очищается при использовании кеша объектов из LiteSpeed ​​в этом коде, потому что это игнорирует назначение кеша

Есть ли способ уменьшить использование памяти PHP, сохранив предел памяти 1024M?

...