Периодически не подгружаются картинки на сайте, почему?

Всем привет! Периодически перестают грузится на сайте картинки, при том с разных компьютеров с сайта все грузится по разному - у кого-то все ок, у кого-то нет. Начались такие проблемы проявляться после создания ЧПУ на сайте (ну или раньше не были просто замечены даже).
В network в браузере-курильщике:
147256a2027841e6ab2a5f0131dbf9f7.jpg
В нормальном браузере:
ddef62aa3abf4d7cbc5ebb6c800a4cc0.jpg

При том со временем это пропадает. Бывает такое, что страница перед загрузкой думает от 5 до 25 секунд, а бывает все на лету. В чем может крыться причина сей боли?
  • Вопрос задан
  • 1046 просмотров
Пригласить эксперта
Ответы на вопрос 1
@xtreme
Снимаю порчу по SSH :)
Pending - это ожидание. Если у курильщика Chrome - тогда он ограничен 6 одновременными соединениями к одному ресурсу. Ты установил коннект, получил страницу и браузер начинает подгружать статику. И судя по браузеру "некурильщика" - у тебя там мелкие картинки, и на каждый файл надо установить соединение. С ограничением в 6 соединений, если у тебя сверху заливается нечто тормозящее - остальные будут курить до освобождения очереди.

Включаю телепатический шлем...

Как один из вариантов - объединить мелкие картинки в спрайты и грузить их одним коннектом, отображая с помощью CSS нужные участки в нужных местах. (Google PageSpeed тебе то же самое подскажет)
Второй, как полумера - использовать кеш браузеров клиента, чтобы не грузить картинки каждый раз с сервера. Но в первый раз все равно придется загрузить их со страницы в любом случае.
Далее, судя по всему у тебя либо подрезана скорость на доступ к веб-серверу, либо сервер откровенно тормозит. Картинку размером в 80КБ грузить секунду - это долго.
Рискну предположить, что у тебя в качестве веб-сервера стоит апач. В таком случае рекомендую увести его например на 127.0.0.1:80, а перед ним на этом же сервере на внешний интерфейс воткнуть nginx с простым конфигом:
(Естественно, путь до проекта и внешний IP-адрес подставить свои)
server {
  listen 192.168.0.1:80;
  server_name my-super-puper-project;
  
  location ~ ^.+\.(jpg|png) {
    root /home/www/your-project-name;
    expires 1d;
  }
  location / {
    proxy_pass http://127.0.0.1:80;
  }
}


В этом случае картинки (jpg|png) будет отдавать легковесный nginx без участия apache, что значительно разгрузит твой сервер, а на apache будет уходить все остальное (в т.ч. и ЧПУ-ссылки). Если у тебя css и js также отдаются прямо с диска, а не генерятся на каждый запрос динамически, как сумасшедшие - можно их включить в конфиг к картинкам.
Если с сетью порядок - браузер станет получать статические файлы гораздо быстрее, а значит время Pending тоже уменьшится, что благоприятно скажется на быстродействии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы