簡體   English   中英

在 Laravel 中緩存圖像的最有效方法

[英]Most efficient way to cache images in Laravel

我正在開發一個 Laravel 應用程序,我需要在其中顯示來自 Instagram 的 CDN 的圖像,並認為緩存這些圖像而不是不斷地查詢 CDN 是個好主意。

我發現干預圖像緩存是滿足我要求的唯一選擇。 我寫了一個簡單的路由,涉及傳遞部分 CDN url,然后調用控制器來緩存圖像。 我必須提到我使用 FileSystem 存儲作為緩存驅動程序。

routes/web.php

Route::get('/img/{code}/', 'PostController@setImageCached');

app/Http/Controllers/PostController.php

public function setImageCached($code) {
        $cdn_image = $this->getImage($code);
        $img = Image::cache(function($img) use($cdn_image){
            return $img->make($cdn_image);
        }, 10);
        return Response::make($img, 200, array('Content-Type' => 'image/jpeg'));
    }

雖然它可以工作,但它非常緩慢,幾乎比直接從 CDN 獲取圖像慢三倍,所以要么我使用的庫錯誤,要么它沒有緩存圖像。

是否有更好的方法從 CDN 緩存圖像,以便我的應用程序不必不斷查詢 Instagram 的 CDN?

你可以試試內置的 Laravel 緩存機制。 不確定您使用的庫是如何工作的,因此這可能是一種更可靠的方法。

public function setImageCached($code) {
        $cdn_image = $this->getImage($code);
        $img = Cache::remember('image_'.$cdn_image, 10, function () use ($cdn_image) {  
           return file_get_contents($cdn_image);
        });
        return Response::make($img, 200, array('Content-Type' => 'image/jpeg'));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM