Картиночные сервисы

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