Как я могу ускорить задачи CURL? - PullRequest
2 голосов
/ 12 апреля 2010

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

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

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

Спасибо

Ответы [ 5 ]

3 голосов
/ 14 апреля 2010

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

3 голосов
/ 12 апреля 2010

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

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

1 голос
/ 26 октября 2014

Ускорьте завиток с этой опцией

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

Привет

1 голос
/ 12 апреля 2010

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

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

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

0 голосов
/ 12 апреля 2010

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

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

Затем в вашем первом файле сделайте что-то вроде этого:

<?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

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

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

<?php

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...