Published by @misha on 2018-07-23
Для чего это:
- загрузка и хранение картинок
- быстрая выдача
- оптимизация jpg, png, gif, выдача в оптимальном для этой картинки формате
- нарезка превью и прочие графические операции
Огромная гугловая статью про автоматическую оптимизацию картинок: https://developers.google.com/web/fundamentals/performance/op...
Принцип работы у них одинаковый:
- API, аналогичный возможностям графических библиотек, из чего для превью нужен в общем-то только ресайз, ну может кроп ещё. Делается это прямо подстановкой этих параметров в URL картинки: https://example.imgix.net/products/desk.jpg?w=600 запрашивает превью шириной 600 пикселей
- однажды сгенерированная по параметрам картинка отдаётся из кэша
Есть облачные, с хранилищем и CDN. Их минусы:
- нет точек присутствия в России, только в Европе (важно если проект медийный и в России, из-за скорости загрузки и конверсии)
- для больших объёмов трафика они дороговаты
- у imgix вроде нет оптимизации картинок
Эти используют CDN Akamai, Fastly, CloudFront, на выбор
API: https://cloudinary.com/documentation/image_transformations
Цены: https://cloudinary.com/pricing
У этих свой CDN
API: https://docs.imgix.com/apis/url
Цены: https://www.imgix.com/pricing
Есть self-hosted, их можно развернуть у себя. Их минусы:
- картинки генерируются по запросу, что может быть проблемой с производительностью. Даже если картинка отдаётся из кэша — это всё равно происходит через ручку сервиса. Для облачных сервисов это неважно, потому что производительностью занимаются они, а для self-hosted может быть важно. Это нужно тестировать. Проблема немного сглаживается, если использовать CDN (он кэширует запросы).
- нужен внешний CDN (и, естественно, хранилище)
https://github.com/thumbor/thumbor, 109 контрибуторов, на питоне
https://github.com/imazen/imageflow, 12 контрибуторов, на Rust и C