Как правильно создать картинки что бы не сломать сервер?
Добрый день. На странице выполняется порядком 500 запросов Ajax. Каждый Ajax создает по 4 миниатюры не больших размеров. Суть в том что на локалке весь этот процесс нагружает проц на ~30%, а оператива почти не используется. Скажите пожалуйста, я сделал что то не так или это так и должно быть. Каким образом создать все эти миниатюры да так что бы не сломать хостинг?
Дмитрий, Ajax запросы удаляют старые изображения и создаю новые. Но не всегда они работают во всеми картинками. В обработку попадают только те файлы размеры которых я изменил.
К примеру есть три размера:
category — изображение которое выводится в списке записей категории
post — изображение которое выводится на странице самой записи
thumbs — самый маленький размер, он используется много где (но не суть)
изначально размер для category был 150x150, и я изменю на 200х200, таки образом в обработку попадут файлы которые содержат размер (имя_файла.150x150.png) все остальные размеры я не трогаю...
Валера Карманов, например после загрузки изображения делать три размера, оригинал, побольше и поменьше. Далее от настроек выводить нужную, и добавлять масштаб через стили
Дмитрий, Это интернет магазин. На странице товара у которого есть порядком 10 изображений в карусели, надо создать изображения размером 500х500, и создавать из перед загрузкой страницы это как то не вариант. Вот я и хочу что бы они все создавались ajax-ом с бэкэнда (это был пример, несколько товаров содержат столько картинок, все остальные по 1-2)
Валера Карманов, то есть пользователь добавляет картинку, и указывает размеры?
Можно не сохранять, а сделать ресайзер на лету через скрипт, нагрузка конечно будет
Дмитрий, нет, эти размеры указываются в общих настройках к которым не попасть обычному пользователю. При загрузке изображения все миниатюры будут созданы автоматом после загрузки оригинала, а на страницу уже выводиться готовое имя файла с указанием размера и расширения
Валера Карманов, ну и выводите скриптом по аргументам
Ссылка будет вида
/resize.php?w=500&h=300&file=filename
Причём можно закрыть доступ прямой к картинке и даже расширение файла
На странице настроек есть поля которые определяют размер картинок в определенной области на странице. После сохранения подключается JS который первым запросом получает список файлов для обработки. Для каждого полученного имени файла я создаю Ajax объект который добавляю в $.when, и уже эти самые запросы создают мне миниатюры. На каждый файл по 4 миниатюры. На локалке каждый запрос не превышает 1 сек.
Не знаю как лучше, делать один запрос и создавать в нем 2000 файлов, или создать 500 запросов и создать в нем по 4 файла. Я уже написал ответ Дмитрий, я не всегда работаю со всеми файлами.
Валера Карманов, размер картинок можно менять на фронте с помощью css и js. На бэке их меняют, чтобы уменьшить трафик. В вашем же случае, вряд ли вы эту цель преследуете как уменьшить трафик. Поэтому вопрос возникает, зачем вы так делаете?
aby125, вот как было раньше, скрипт создания изображений начинал работать после того как я получу готовый html. В нем я ищу ссылки на изображения, добавляю к ним корень сайта что бы найти оригинал изображения и создаю миниатюру с указанным размеров. Так как на самой странице не так уж и много изображений таких проблем не было. Однако первый раз когда миниатюр не было страница грузилась очень долго. Все остальные разы страница грузилась куда быстрей по сравнению с первым разом
Валера Карманов, так вы с помощью css уменьшайте. Никакой нагрузки тут не будет. Отдайте одно изображение максимального разрешения, которое используется. Не надо его ресайзить много раз. Если оно одинаковое, только размеры разные. А потом уже на js и css на фронте делаете какие-то манипуляции с изображением.
Есть lazyload используйте его пусть себе создаются миниатюры по 10 за одну подгрузку. Да и в общемто такие задачи нужно решать при загрузке картинки. Загрузил сделал миниатюры, или на сервере при инициализации проекта. Можете создать файлик php и запускать его через команду nice с пониженным приоритетом что бы делал своё дело в фоне