2010-12-06 4 views
1

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

<?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); 
    } 
?> 

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

ответ

-1

Единственное, что вы могли бы сделать, это посмотреть, как использовать keepalive-соединения, если запросы находятся на одном сервере.

+0

Да, вызовы относятся к одному и тому же серверу, только разные параметры с и разные возвраты на выходе. Будет ли живым быть хорошим для этого? Если да, то как мне сохранить связь между сервером API и моим живым дольше с помощью cURL. – lolmoney 2010-12-06 19:11:08

+4

-1 php curl автоматически использует keepalive. http://stackoverflow.com/questions/972925/persistent-keepalive-http-with-the-php-curl-library – 2010-12-06 19:14:39

+0

@Whitlock серьезно, вы получаете удовольствие от людей с downvoting? Я действительно не думаю, что это такой плохой ответ. Может быть, он не знал лучше. Я думаю, Тайлер пытается помочь lolmoney? – Alfred 2010-12-06 21:38:18

4

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

-1

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

6

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

7

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

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

0

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

<?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(); и сохранить его результат в переменной за один раз.
2

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

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

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

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