{% else-1 %}
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 23:58) (0/0) [0]
Playtox, В ЛС ответил на данный вопрос
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 16:24) (0/0) [0]
Playtox, логично же, что - Да.
Но Вы в теме указали, что донор виснет от обилия запросов
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 15:34) (0/0) [0]
Playtox, Это я не учитывал
Я ориентировался на VDS/Сервер
При этом cron php вызывается НЕ через URL а прямым вызовом php файла
(php -f /var/www/site/cron.php)
При этом можно поставить на старт крона блокировку (например создание файл cron.lock)
При окончании работы cron удалять файл, а при старте проверять, нет ли блокировки
Таким образом можно исключить тот момент, что будет выполнятся два cron задания
Либо пойти более сложным методом и писать в файл pid запущенного процесса php
При старте проверять есть ли файл блокировки + существует ли в системе pid данный
Но это уже более отказоустойчивый вариант
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 15:26) (1/0) [1]
Playtox, например при заборе данных не дёргать getClanInfo
А брать данные клана, когда юзер хочет их увидеть (переходит на страницу клана) и при первом запросе (если данных нет в БД) то писать в базу, если данные есть, то сразу с базы выводить
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 15:12) (0/0) [0]
Playtox, sleep применить, или данные частями извлекать
Mobiaaa * Верифицирован 2.73
(17 фев 2016, 04:26) (0/0) [0]
Playtox, Собственно Вот и "узкое горлышко" в Вашем первом варианте, у Вас в цикле дёргается ещё один метод
getClanInfo
Который 99% что делает ещё один запрос к удалённому сайту
Следовательно
1 запрос на листинг + 20 запросов getClanInfo
Что явно быстро не выполнится
Из оптимизации, это если getClanInfo поддерживает "мультизапросы" и возможность вытянуть сразу пачку данных ($max)
Остальное всё экономия на спичках
Mobiaaa * Верифицирован 2.73
(16 фев 2016, 23:41) (0/0) [0]
Playtox, В крон
перед добавлением очищать таблицу и наполнять заново, если нужно только выводить
Mobiaaa * Верифицирован 2.73
(16 фев 2016, 22:27) (0/0) [0]
Playtox, только если API так возвращает...
Mobiaaa * Верифицирован 2.73
(16 фев 2016, 21:41) (0/0) [0]
Playtox, $data=$api->getClans($max,0);//часть данных с $pos позиции
Выделенный "0" заменить на $pos
когда копировал, забыл отредактировать
Mobiaaa * Верифицирован 2.73
(16 фев 2016, 15:10) (0/0) [0]
Playtox,
Узнайте сколько максимум можно вытянуть данных за раз + сколько всего записей
Итого
$all=14000;
$max=50;
$itr=round($all/$max,0, PHP_ROUND_HALF_UP);
for($i=0;$i<$itr;$i++)
{
$pos=$i*$max;
$data=$api->getClans($max,$pos);//часть данных с $pos позиции
if(!$data)exit('данных нет');
foreach($data as $k=>$v)
{
//запись в базу $k = ключ массива, $v - данные
}
}

Проще простого, и ничего сверхъестественного *
Код не идеален, можно оптимизировать, например, если это mysqli/pdo, то можно перед циклом подготовить запрос, а потом в цикле только данные вставлять, будет чуть быстрее