2011-01-11 1 views
0

Я написал себе веб-искатель с использованием simplehtmldom и получил процесс обхода, который работает очень красиво. Он сканирует стартовую страницу, добавляет все ссылки в таблицу базы данных, устанавливает указатель сеанса и мета обновляет страницу для перехода на следующую страницу. Это продолжается до тех пор, пока не закончится ссылкаНаписание PHP-искателя с помощью cron

Это прекрасно работает, однако, очевидно, что время сканирования для больших сайтов довольно утомительно. Я хотел бы немного ускорить работу и, возможно, сделать работу cron.

Любые идеи по обеспечению его как можно более быстрого и эффективного, кроме как установить ограничение памяти/время выполнения выше?

+1

Поиск SO или Google для php-профилировщика. Вы можете точно определить, что замедляет все. Оттуда вы можете задать более конкретный вопрос, например: «Как ускорить« file_get_contents() ». –

+1

Я буду использовать это на сайтах, которые я/моя компания строит только для проверки мертвых ссылок, и проверьте, что у всех ссылок есть приличный якорь + заголовок, убедитесь, что на всех страницах есть тег title/h1 и т. Д. – Horse

ответ

1

Память не должна быть проблемой для гусеничного устройства.

Как только вы закончите работу с одной страницей и напишите все необходимые данные в базу данных, вы должны избавиться от всех переменных, которые вы создали для этой работы.

Использование памяти после 100 страниц должно быть таким же, как после 1 страницы. Если это не так, узнайте, почему.

Вы можете разделить работу между различными процессами: Обычно разбор страницы не занимает столько времени, сколько нужно загрузить, поэтому вы можете написать все ссылки, которые вы найдете в базе данных, и иметь несколько других процессов, которые просто загружают документы в временный каталог. Если вы это сделаете, вы должны убедиться, что

  1. Ссылка не загружена рабочими.
  2. ваши процессы ждут новых ссылок, если их нет.
  3. Временные файлы удаляются после каждого сканирования.
  4. процесс загрузки останавливается, когда вы исчерпаете ссылки. Вы можете архивировать это, установив флаг «kill», это может быть файл со специальным именем или записью в базе данных.
+0

Я думаю, что я написал довольно жесткий процесс, хотя мог бы сделать некоторые улучшения с взаимодействием с базой данных. Единственное, на что я не уверен, - это сделать это cron без перекрытия cronjobs. Очевидно, чем больше страница, тем больше обработка должна произойти, поэтому не уверен, как я могу вписаться в определенное количество экземпляров процесса в задании, не тратя время на обработку, а не на то, где она пересекается экспоненциально – Horse

2

Похоже, вы используете свой скрипт в веб-браузере. Вы можете запустить его из командной строки. Вы можете выполнять несколько сценариев для одновременного сканирования на разных страницах. Это должно ускорить процесс.

+0

Он говорит, что хочет превратить его в cronjob, поэтому я думаю, что он уже написал это как скрипт командной строки. –

Смежные вопросы