Comments 21
Ну и рендеринг всякой фигни, типа «картинок счётчиков посещений/активности» или чего-то такого. Архаично, но народу нравится :)
Т.к. обработка изображений — это очень cpu-intensive задача, но её стоит выносить в многопоточный обработчик.
Очень даже многопоточный. Поэтому залипнет только тот поток, который будет масштабировать картинку.
Собственно точно так же он залипает пока жмёт gzip-ом или brotli.
Если к этой схеме прикрутить кеширование, то вполне себе рабочий вариант.
У нас еще и по куке «опознает» ретину, и выдает по запросу 100х100 в реальности 200х200.
Не вводит ли это в заблуждение и что вернет кэш другому клиенту?
Много решений для этого есть, например
background: image-set(
url('https://example.jpg?resize=400x400') 1x,
url('https://example.jpg?resize=800x800') 2x)
ну или media
Кроме того, нормальным решением будет еще и разнести front/resizer на разные nginx процессы, где front принимает запрос, разбирает его, кеширует ответ, а resizer висит на localhost и только ресайзит картинки.
А какой смысл держать ещё один nginx, который будет заниматься только сжатием картинок? Не вижу преимущества никакого. Тогда уже можно просто сделать FastCGI-шный скрипт, который будет жать картинки и отдавать на front.
Подскажите, пожалуйста, как правильно автоматизируют процесс, чтобы, например, в папке image_01 получать эти фотки в конкретном разрешении без потери качества?
Как это делают на порталах продаж и какие трудности, возможно, неочевидные возникают?
Понятно, что есть модерация фоток, а на стадии image_all получают ссылку в базе данных.
Вот в ручном режиме пробовал прогой ImBatch, — понравилось, только ищу автоматизацию.
Объясните пожалуйста почему не используется предварительное создание разных размеров изображений? Неужели вариантов на столько много, что время процессора стоит дешевле места на диске?
+ время процессора будет затрачено 1 раз в сутки, дальше будет отдаваться из кэша. Да и то, даже первый ресайз происходит очень быстро.
Смотря чего вам требуется достигнуть.
Можно настроить rate limit чтоб не долбили часто ngx_http_limit_req_module
Можно нормализовать экзотические размеры, типа 365x365 => 400x400
Можно ограничить с помощью ngx_http_secure_link_module
Ну или любую логику на lua добавить.
Ресайз изображений на лету с помощью Nginx и LuaJIT (OpenResty)