simplehtmldom и нехватка памяти

Тем, кто периодически делает парсеры сайтов, должна быть знакома библиотека Simple HTML DOM. Возможно, при написании очередного парсера, Вы вдруг столкнулись с нехваткой памяти. Такое может случиться, если в цикле загружается и обрабатывается много страницы (тем более увесистых). Проблема кроется в том, что PHP не успевает освобождать память от уже использованных simplehtmldom объектов, ссылки на которые не были уничтожены явно. Иначе говоря, если вы присвоили переменной новое значение, это не значит, что предыдущее значение сразу же освободило память. На это уйдет какое-то время.
Решается данная проблема явным уничтожением переменной, содержащую ссылку на объект, перед началом очередной итерации. Кроме того, сам объект имеет публичный метод clear(). В итоге получится что-то вроде этого:

for ($i=0; $i< $pages; $i++) {
    $html = str_get_html($pageHTML[$i]);
    // ... парсинг страницы ... //
    $html->clear();
    unset($html);
}

Ситуация с потреблением памяти изменится очень заметно.

This entry was posted in PHP, Оптимизация, Работа. Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать язык разметки Markdown

Protected by WP Anti Spam