我正在开发一个Laravel应用程序,其中我需要显示来自Instagram的CDN的图像,我认为缓存这些图像而不是不断查询CDN是一个好主意。
我发现Intervention Image Cache是满足我的需求的唯一选择。我写了一个简单的路由,包括传递部分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?
发布于 2019-12-09 18:45:19
您可以尝试内置的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'));
}https://stackoverflow.com/questions/59246396
复制相似问题