У меня есть веб-сайт, который позволяет пользователям добавлять (загружать) фотографии в альбомы.
Для того, чтобы защитить фотографии, они хранятся в папке за пределами /public_html
и отображается на страницах через скрипт PHPThumb который отображает уменьшенные по размеру версии фотографий с более низким качеством (поскольку фотографии с высоким разрешением могут быть загружены), а также позволяет пользователям добавлять свои водяные знаки на фотографии.
Моя проблема в том, что иногда, когда на определенный альбом (страницу) попадает много трафика, некоторые фотографии не отображаются или на целой странице отображается 500 Internal Server Error
в целом (хотя я использую нумерацию страниц и показываю только 40 фотографий на страницу). До возвращения сайта может пройти несколько секунд, а иногда и минут.
Я думал, что использование библиотеки миниатюр уменьшит нагрузку, потому что серверу не нужно отправлять целые фотографии в высоком разрешении, а только версии с измененным размером. Но, похоже, это не так.
Я использую пакет общего веб-хостинга, и хотя я знаю, что общий доступ не рекомендуется для моего веб-приложения, я хотел бы изучить любые другие варианты улучшения сайта, прежде чем я решу обновить свой пакет веб-хостинга.
Любые предложения по предотвращению 500
ошибка?
Также будет принимать предложения для хорошего веб-хостинга, учитывая настройки, описанные выше. (Я не очень хорошо разбираюсь в администрировании сервера.)
Эти миниатюры не генерируются на лету при каждом запросе, и они кэшируются, верно? Если нет, вы можете начать с этого.
Хранение исходного изображения вне публичного каталога имеет смысл, но вы можете рассмотреть возможность хранения миниатюр в общедоступном каталоге, чтобы вы могли обслуживать их напрямую, без обработки.
Также убедитесь, что при отправке этих миниатюр вы отправляете правильные заголовки кэша. Учитывая, что миниатюра является маленькой копией увеличенной версии, она не изменится, поэтому вы можете установить дату окончания срока действия очень далеко вперед.
3.1 Однако в вашем случае вы позволяете пользователю размещать водяной знак на миниатюрах, чтобы вы могли кэшировать свои миниатюры на основе этого водяного знака. Вы можете хешировать имя изображения + водяной знак и получить имя миниатюры. Если водяной знак изменится, имя миниатюры также будет другим, поэтому заголовки истечения срока действия кэша далеко не укусят вас.
Других решений пока нет …