2010-04-12 1 views
2

Я использую CURL для получения некоторых данных из учетных записей пользователей. Сначала он регистрируется, а затем перенаправляется на другой URL-адрес, где находятся данные.Как ускорить задачи CURL?

Моя статистика показала, что для получения некоторых данных на 5 страниц потребовалось в среднем 14 секунд. Я хотел бы ускорить процесс, мои вопросы:

Можно ли увидеть, сколько стоит каждый шаг? Знаете ли вы, как я мог ускорить/улучшить CURL?

Благодаря

ответ

3

вы можете использовать parallelCurl by Pete Warden. Источник доступен здесь http://github.com/petewarden/ParallelCurl.Модуль позволяет запускать несколько CURL URL выбирает параллельно в PHP

+0

спасибо, я посмотрю и посмотрю, соответствует ли это моим потребностям. Вы используете это? – embedded

-1

Вы могли бы попробовать многопоточности, хотя я тоже уверен в том, что бы полностью работать или нет.

+0

Я использую многопроцессорной обработки, но я хотел бы, чтобы ускорить каждый Задача CURL как можно больше, потому что мне нужно выполнить обновление БД через 4 часа. – embedded

3

Чтобы сделать задачу «чувствовать» быстрее, не запускайте ее как часть веб-запроса, запустите ее в фоновом режиме как периодическую задачу (задание cron).

Кэш-ответ на диске или в базе данных.

+0

Я запускаю его как работу CRON. Что значит кеш-файл на диске? – embedded

1

Вы не можете ускорить процесс получения страницы с сервера.

Вы можете сделать страницы более мелкими, чтобы их можно было загрузить быстрее. Вы можете усилить мощность обработки на серверах или соединение между вашим сервером и сервером, на котором находятся страницы.

Если вы используете услугу, в каком формате находятся данные? Если это XML, может быть, он слишком многословный, и это вызывает, например, много лишних килобайт.

+0

его в формате HTML. Может быть, я мог бы избавиться от изображений и просто загрузить текст? Можно ли использовать CURL? – embedded

+0

CURL НЕ загружает изображение. –

+0

Итак, есть ли какие-нибудь настройки CURl, которые я мог бы попробовать? Можно ли найти шаг узкого места? – embedded

0

Разделить задачу на 3 файла.

  1. файл для получения списка страниц и в качестве основного сценария (поставить на кронтабе) (main.php)
  2. для анализа фактической страницы. (parse.php)
  3. некоторый сценарий оболочки для обработки вашего второго скрипта.

Затем в своем 1-ом файле, сделать что-то вроде этого:

<?php 
$pagelist = get_page_list();//this will retrieve page list using CURL and save each page to some, let's say pagelist.txt and return this absolute path. 

exec("/path/to/php /your/3rdscript.sh < $pagelist"); 
?> 

И вот ваш третий файл:

#!/bin/bash 

while read line 
do 
    /path/to/php /path/to/your/2ndscript.php -f $line & 
done 

Пожалуйста, обратите внимание, что на 3-й сценарий (скрипт оболочки) I использование & (амперсанд). Это скажет оболочке о том, что этот конкретный процесс перейдет в фоновый процесс.

На Вашем 2 сценария, вы можете использовать что-то вроде этого:

<?php 

$pageurl = $argv[2]; 
//do your curl process to fetch page $pageurl here 

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

+0

Прямо сейчас я разбираю все полученные данные из CURL. Считаете ли вы, что, используя ваше предложение, я мог бы ускорить работу с заметным фактором? – embedded

0

Ускорить локон с этим Opcion

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

С уважением

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