Доброго времени суток. Есть сайт, который работает по принципу file_get_contents. (берет информацию с Web Api). Есть проблема. При быстром нажатии на F5, сайт зависает на некоторое время, т.к. наверное не справляется с нагрузками. Возможно ли как-то снизить нагрузку на страницы, где используется данная функция? Если будет много людей сидеть на сайте, то мне кажется он вообще взорвётся. Буду благодарен за помощь.
Код вывода информации: https://gist.github.com/Xhonor/f6720ec44eef783af9625dcf31d62950
Код откуда берётся информация: https://gist.github.com/Xhonor/469ba3f45d6660049d5e7e81a5a03bba
Всё работает на Steam Web Api
Есть такая штука, называеться network latency
- время потраченое на путешествие по проводу.
Это очень медленно, и чем больше расстояние тем медленнее(скорость света). Даже если сравнивать скорость доступа к localhost
и рядом стояшему такому же компьютеру. Разница в скорости запроса будет до 20 мс.
Подозреваю steam
хостит свои api сервера на немалом ростоянии от вашего провайдера, т.е. Каждый запрос вам будет обходиться в лучшем случае 100мс в одну сторону.
Сгонять туда обратно - 200мс(оптимистично), это для каждого! запроса к api
. Простая математика говорит что более 5 запросов в секунду не проделаешь.
Поменять код что бы делать меньше запросов к api
. Хранить информацию в сессии или кэше...
Кэш - memcached
, redis
. Эти приложения позволяют хранить данные определенное время(полчаса например).
С сессией тяжелее, самому надо будет временем управлять.
Пример:
<?php>
// Псевдо код для понимания а не копирования!!!
function getUserInfo($userId)
{
// Пробуем читать из кэша/сессии
$userInfo = $cache->read("user_info_" . $userId);
// Если в кэше нет
if (!$userInfo) {
// Читаем с api.
$userInfo = $api->read("user_info_" . $userId);
// Пишем в кэш на 30 минут
$cache->write("user_info_" . $userId, $userInfo, 30);
}
// Возвращаем значение.
return $userInfo;
}
// Пишем информацию о пользователе
function setUserInfo($userId, $userInfo) {
// Пишем новые значения в api.
$api->write("user_info_" . $userId, $userInfo);
// Пишем новые значения в кэш. Важно что бы небыло старых данных
$cache->write("user_info_" . $userId, $userInfo, 30);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеЕсть страница заказа, и на неё должны подтягиваться данные с нескольких таблиц БД
Сайт на хостинге с cPanelПочта используется с помощью biz