fomvasss
@fomvasss
PHP developer

Почему Intervention Image Cache не кеширует изображения?

Для сайта на Laravel 5.3 установил плагин Intervention Image Cache для кеширования изображений, опубликовал конфиги, задал пути.
Сделал роут для картинок. Проблема в том что каждый раз когда я обращаюсь к картинке через этот роут, она, я так понял заново, обрезается и кешируется, хотя картинка уже должна быть в кеше, и соответственно на сайте все изображения грузятся долго, хотя их размер по 30 -100 КБ.
Решение с настройкой ответа, для кеширования на стороне браузера не чего не меняет ...
Вот мой код где я кеширую изображения:
$img = Image::cache(function($image) use($path) {
        return $image->make($path)->resize(420, 360);
}, 43200, false);

И код ответа для роута:
$mime = finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $img);
        return new IlluminateResponse($img, 200, [
            'Content-Type' => $mime,
            'Cache-Control' => 'max-age=' . 43200) . ', public',
            'Etag' => md5($img)
        ]);

Теоретически все должно работать, в документации написано (третей абзац) что каждый вызов "Image::cache" проверяет есть ли изображение в кеше, если да - берет от туда, если нет кеширует.
И вот мои тайминги с браузера:
ef85968ba6cd487ebcd95c973fb33050.png9060e4132c0b4c809ec4ac1c6ab70fa1.png
  • Вопрос задан
  • 677 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
Вот смотрю я на такие попытки кеширования и у меня просто недоумение это вызывает. Вы серьезно собираетесь дергать пхп на каждый запрос к картинке?
Если хотите ресайзить картинки автоматически, то кешируйте через nginx, а через эту бесполезную функцию cache
fastcgi_cache_path  /home/www/nginx levels=1:2 keys_zone=CACHE:256m max_size=100m inactive=100d; 

    server {
        server_name domain.ltd;
        listen 80;

        location ~ /image/resize/([0-9]+) {
            fastcgi_cache CACHE;
            fastcgi_cache_key "domain.ltd$request_uri";
            fastcgi_cache_use_stale updating error timeout http_500;
            fastcgi_cache_valid 200 302 304 30d;
            fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
            add_header X-Cache $upstream_cache_status;

            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME /home/www/domain.ltd/public/index.php; 
            include fastcgi_params;


Ну и сам скрипт который ресайзит (от отрабатывает один раз, потом nginx отдаёт картинку из кеша, не дергая пхп)
$img = Image::make($path)->resize(420, 360);
return $img->response('jpg');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы