У меня есть веб-портал, которому необходимо загрузить много отдельных json-файлов и отобразить их содержимое в виде вида формы. По лотам я имею в виду 32 отдельных файла.Самый быстрый способ загрузки нескольких URL-адресов
Я пробовал cUrl с итерацией грубой силы и ее принятием ~ 12,5 секунд.
Я пробовал curl_multi_exec, как показано здесь http://www.php.net/manual/en/function.curl-multi-init.php с функцией ниже и ее выбором ~ 9 секунд. Немного лучше, но все еще ужасно медленно.
function multiple_threads_request($nodes){
$mh = curl_multi_init();
$curl_array = array();
foreach($nodes as $i => $url)
{
$curl_array[$i] = curl_init($url);
curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $curl_array[$i]);
}
$running = NULL;
do {
curl_multi_exec($mh,$running);
} while($running > 0);
$res = array();
foreach($nodes as $i => $url)
{
$res[$url] = curl_multi_getcontent($curl_array[$i]);
}
foreach($nodes as $i => $url){
curl_multi_remove_handle($mh, $curl_array[$i]);
}
curl_multi_close($mh);
return $res;
}
Я понимаю, что это дорогостоящая операция, но кто-нибудь знает какие-либо другие альтернативы, которые могут быть быстрее?
EDIT: В конце концов, моя система ограничивали curl_multi_exec и перемещение кода на производственную машину увидели значительные улучшения
Должно ли это быть в бэкэнде? Почему бы вам не переместить выборку клиенту? Некоторые магические заклинания AJAX, ходовые представления и ваш основной результат. В waaaay менее 9 секунд. ;-) – nietonfir
да ... я подумал об этом, но мне пришлось бы легко реорганизовать ~ 75% моей работы, которую я не могу сделать в краткосрочной перспективе. В долгосрочной перспективе это определенно то, что я должен делать. – Brad
Кэширует вариант? Либо явно, либо неявно. (Он в значительной степени ортогонален перемещению выборки на стороне клиента.) – user2864740