Оптимизация cURL для скорости - PullRequest
1 голос
/ 06 декабря 2010

Я делаю веб-приложение, которое часто выполняет вызовы API. Все вызовы API - это всего лишь простой запрос GET, однако я хочу максимально ускорить время загрузки и время возврата вывода. На данный момент я использую cURL для выполнения вызовов API с помощью следующего:

<?php
function api_call($params)
  {
  $base = 'https://api.example.com/Api?';
  $url = $base . http_build_query( $params );
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($ch);
  return json_decode($output,true);
  }
?>

Есть ли способы, которыми я могу оптимизировать это для более быстрой загрузки и / или времени вывода?

Ответы [ 7 ]

8 голосов
/ 06 ноября 2011

Можно ли использовать IP-адрес вместо имени хоста api.example.com?Если да, вы можете ускорить namelookup_delay (пару сотен миллисекунд в моем случае)

Keep-alive не помогает в вашем случае, поскольку keep-alives не объединяет соединения между запросамиЭто полезно в классическом сценарии webbrowser-webserver.

6 голосов
/ 06 декабря 2010

Есть ли способ использовать кеширование, если между многими вызовами API данные иногда совпадают?Это скорее проблема скорости соединения, чем проблемы кода.

4 голосов
/ 06 декабря 2010

Не совсем.Скорость кода на самом деле не может быть сильно оптимизирована там.Узким местом будет соединение между вашим сервером и их сервером.Вы не можете ничего сделать, чтобы ускорить это в коде.

2 голосов
/ 20 апреля 2016

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

curl_setopt($ch, CURLOPT_ENCODING, '');//set gzip, deflate or keep empty for server to detect and set supported encoding.

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

0 голосов
/ 27 сентября 2015

Оптимизировано:

<?php
    function api_call($params)
    {
        $url='https://api.example.com/Api?'.http_build_query($params);
        return json_decode(file_get_contents($url),true);
    }
?>

Вы также можете:

  1. Удалить переменную $url и вставить строку в file_get_contents().
  2. Если $params не изменяется, тогда вы также можете удалить http_build_query(); и сохранить его результат в переменной один раз.
0 голосов
/ 06 декабря 2010

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

0 голосов
/ 06 декабря 2010

Единственное, что вы можете сделать, это посмотреть на использование keepalive-соединений, если запросы поступают на один и тот же сервер.

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