#php #api
#php #API
Вопрос:
Например, на одной странице у меня около 30 различных вызовов, таких как [high_shortcode pair=»EURUSD»] ..(самая высокая цена на сегодняшний день для каждой пары (EURUSD, GBPUSD …. и т.д.)), Что резко замедляет открытие html и страницы, потому что результаты ожидают каждого вызовадо последнего и только после этого открывается страница.
Это код, который я использую для одного результата, тот же код, который я использую для другой пары (USDCHF ….) на одной странице.
Можно ли что-то сделать с дополнительным кодом, чтобы сократить время загрузки.
function high_shortcode($atts){
ob_start();
$atts = shortcode_atts(array(
'pair' => '',
), $atts, 'high_shortcode');
$pair = $atts['pair'];
$curl = curl_init(get_option( 'api_address' ).'bars/'.$pair.'?timeframe=PERIOD_D1amp;count=1');
curl_setopt($curl, CURLOPT_URL, get_option( 'api_address' ).'bars/'.$pair.'?timeframe=PERIOD_D1');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additional info: ' . var_export($info));
}
curl_close($curl);
$decoded_result = json_decode($curl_response, true);
echo round($decoded_result['Bars'][0]['High']);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
я попробовал то же самое с multi curl, но результат тот же
function low_shortcode($atts){
ob_start();
$atts = shortcode_atts(array(
'pair' => '',
), $atts, 'low_shortcode');
$pair = $atts['pair'];
$urls = array('https://address.com:443/bars/last/'.$pair.'?timeframe=PERIOD_D1amp;count=1');
$url_count = count($urls);
$curl_arr = array();
$master = curl_multi_init();
for($i = 0; $i < $url_count; $i )
{
$url =$urls[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($master, $curl_arr[$i]);
}
do {
curl_multi_exec($master,$running);
} while($running > 0);
for($i = 0; $i < $url_count; $i )
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
}
$decoded_result = json_decode($results, true);
echo round($decoded_result['Bars'][0]['Low'],$bid_ask_decimal[$pair]);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
{«Request»:{«Symbol»:»EURUSD»,»Timeframe»:»PERIOD_D1″,»Count»:1},»Bars»:[{«Time»:1623715200,»Symbol»:»EURUSD»,»Timeframe»:»PERIOD_D1″,»Open»: 1.21179, «Высокий»: 1.21259, «Низкий»: 1.21138, «Закрыть»: 1.21250}]}
Комментарии:
1. Проверьте curl_multi_init для одновременных запросов curl. Это означает, что ваш текущий код нуждается в переписывании, хотя
2. Почему бы не кэшировать данные? Я бы предположил, что чистые вызовы cURL довольно сложно использовать таким образом, так почему бы не использовать библиотеку, подобную Guzzle?