Вот краткий обзор того, что я делаю, на самом деле это довольно просто:
- Выйдите и извлеките записи из таблицы базы данных.
- Пройдитесь по всем этим записям и для каждого столбца, содержащего URL-адрес, выйдите (используя cURL) и убедитесь, что URL-адрес все еще действителен.
- Для каждой записи в столбце обновляется текущая отметка времени, указывающая, когда она была проверена в последний раз, и выполняется некоторая другая обработка базы данных.
Во всяком случае все это работает хорошо и хорошо и делает именно то, что предполагается. Проблема в том, что я думаю, что производительность может быть значительно улучшена с точки зрения того, как я проверяю URL-адреса с помощью cURL.
Вот краткий (упрощенный) отрывок из моего кода, демонстрирующий, как используется cURL:
$ch = curl_init();
while($dbo = pg_fetch_object($dbres))
{
// for each iteration set url to db record url
curl_setopt($ch, CURLOPT_URL, $dbo->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch); // perform a cURL session
$ihttp_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
// do checks on $ihttp_code and update db
}
// do other stuff here
curl_close($ch);
Как вы можете видеть, я просто повторно использую один и тот же дескриптор cURL все время, но даже если я уберу всю обработку (базу данных или что-то еще), сценарий все равно будет выполняться невероятно долго. Поможет ли изменение каких-либо параметров cURL повысить производительность? Настройка значений тайм-аута / и т. д.? Мы будем признательны за любой вклад.
Спасибо,
- Николай