Ваша основная проблема - вы пытаетесь сделать сотни загрузок http для выполнения поиска.Если вы не избавитесь от этого ограничения, оно будет идти так быстро.
Если по какой-то причине файлы вообще не кэшируются вообще (маловероятно), даже иногда, вы можете набрать некоторую скорость, загружая параллельно.Смотрите функции curl_multi _ * ().В качестве альтернативы, используйте wget из командной строки с xargs для параллельной загрузки.
Приведенное выше звучит безумно, если у вас есть какой-либо трафик.
Скорее всего, файлы могут быть кэшированы как минимум в течение короткого времени.Посмотрите на заголовки http и посмотрите, какую информацию свежести отправляет их сервер.Он может сказать, как долго истекает срок действия файла, и в этом случае вы можете сохранить его локально до этого момента.Или это может дать последнее изменение или etag, и в этом случае вы можете выполнять запросы условного получения, что должно ускорить процесс.
Я бы, вероятно, настроил локальный кеш squid иPHP должен сделать эти запросы через Squid.Он позаботится обо всем использовании локальной копии, если она свежая, или при условии получения новой логики новой версии для вас.
Если вы все еще хотите повысить производительность, вы можете преобразовать кэшированные файлы в более подходящий формат (например, вставить соответствующие данные в базу данных).Или, если вам нужно придерживаться формата xml, вы можете сначала выполнить поиск строки по файлу, чтобы проверить, стоит ли вообще разбирать этот файл как xml.