Привет всем, с Новым годом!
Есть на сайте страница, на которой 95% контента состоит из изображений, которые хранятся в каталоге на сайте, идет самый стандартный вывод картинок через
![]()
, но как только появилась эта страница, часто стала выходить 502 страница. Проверил access_log, там все в обращениях к картинкам, за 1 секунду происходит столько запросов, сколько
![]()
на странице. По 20-30 за 1 секунду. Выросло втрое потребление оперативной памяти.
И вот вопрос, а как же сайты где и по 200 картинок на странице у людей и более, разные витрины к примеру с изображениями товаров. В чем соль вообще, как с этим бороться.
Необходимо добиться того, что бы все картинки показывались но не было такой дикой нагрузки на сервер при этом. 1 пользователь создает 20-30 запросов за 1 секунду.
К примеру из лога: ip. - -[29/Dec/2018:04:39:23 +0300] "GET /картинка. png HTTP/1.0" 200 13361 "адрес страницы с картинкой" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
И таких записей за 9/Dec/2018:04:39:23 30 штук (сколько картинок на странице). Это от одного человека. Будет 2 просматривать будет 60 записей, а будет смотреть 60 человек, так вообще боюсь представить.
Как исправить это?
Да уменя есть сайт который состоит из одних картинок сейчас 50 картинок на страницу делал и 200 и 500 причём они ещё и скриптом модифицируются! Проблем не было но я их предусмотрел в заголовки добавил кеширование на стороне клиента до 2118 года :) и ещё буфер на сервере тоесть та картинка которая уже подвергалась обработке помещаться в отдельную папку и потом при запросе
проверяется толи взять и обработать картинку то ли взять готовый вариант уже ранние обработанный работает всё как часы! Да картинки высокого качества весят прилично. Браузеры без труда справляются с загрузкой до 1000 картинок тут уже всё зависит от сервера и скорости интернет чтоб они не начали грузится одновременно можно написать простой скрипт на JS который будет после загрузки первой картинки инициировать загрузку второй и тд
⚤
У тебя там апач? Если да, используй для картинок nginx или залей картинки куда-нибудь наружу. Хоть вон в github pages.
1. В яндекс "использование nginx для раздачи статического контента"
2. 200 картинок... И что? Действительно, когда основной сервер напрягать раздачей картинок нецелесообразно - они могут кэшироваться другими. С картинками это просто. Например, ядро создает ссылки images.mysite.com/[xxx].jpg - сервер смотрит - есть у него этот файл - отдает, нет запросит у основного один раз. Ну и параллелить легко - images1, images2 ...все с одинаковым поведением. И обновлять просто. Важно, чтобы у картинок был уникальный id. Потом накрутка логики с удалением - можно даже не беспокоиться, не было запросов месяц - удаляем, если понадобиться - картинка снова будет взята с мастера. Потом защита, чтобы другие ваши картинки у себя не использовали. И т. д.
Так там уменьшенные картинки на товарах и загрузка происходит постепенно, там же есть разбитие на страницы, а не по 100500 товаров на 1 странице.
Я уверен дело не в самих картинках, очевидно что существует баг в одном из циклов скрипта. для начала попробуй исключить, или заменить изображение на котором начинается баг, если не поможет копай циклы
Вопрос состоит лишь в том, почему за одну загрузку страницы каждая картинка отображается отдельным запросом. Как буд-то бы пользователь обновил страницу 30 раз за секунду. Вот в этом, как мне кажется проблема. Мне кажется такого не должно быть.