通过CakePHP返回图像 - 好主意还是坏主意?

时间:2014-11-25 21:24:46

标签: image cakephp caching

所以我正在建立一个网站,它将收藏大量基于CakePHP的大量不同尺寸图片的文章。我想出了一个通过后端上传图片的方案,然后保存原件。现在每次需要图像时,都会使用图像ID和请求的大小调用图像控制器,然后生成并返回该图像。显然这很重,但我想像Cake可以缓存对我的请求结果。显而易见的好处是,在未来添加新的图像尺寸将是轻而易举的。

但即使有缓存,它仍然会变得沉重吗?我仍然会做很多请求,即使响应会被缓存。那么,好主意还是坏主意?

3 个答案:

答案 0 :(得分:1)

  

现在每次需要图像时都会调用图像控制器   使用图像ID和请求的大小,然后生成和   返回。

如果你只是偶尔的访问者,并且不希望得到更多,并且想要给你的CPU施加压力并填满服务器内存,那就去吧。

最重要的是,这是一个糟糕的解决方案,在最糟糕的情况下可能会崩溃服务器,我实际上已经看到这种情况发生在实时网站上。让我复制并粘贴我Imagine插件的文档中的一些文字:

  

你不应该动态生成图像,特别是不要高   流量网站,它可能会因为你的服务器而被锁定   同时请求的数量。第一个请求会打你的   服务器并开始生成图像,而其他人尝试这样做   同时,导致网站在最坏的情况下被锁定。   没有必要在每个请求上生成图像,实际上它会   是不好的做法,因为它只会加载你的服务器CPU和   消耗记忆。

You can read the whole text here.

最好在上传图像后直接生成所需的版本,如果以后需要其他版本,请通过shell脚本生成它们。

生成图像版本时,根据您应用的操作为其指定唯一名称:

my_horse.thumbnail+width-100-height+100.jpg

这可能会变得很长并且看起来不那么好,所以散列操作是个好主意:

my_horse.e18c820f1c3da390e3d01b4fb91b0f68.jpg

如果您想要包含原始文件名,则取决于您。

如果你不需要保护你的图像,我根本不会通过Cake(PHP)传递它们,而是直接服务它们而不需要php开销。

如果您在flickr图片中查看示例,您可以看到他们很可能以类似的方式进行此操作:

https://c4.staticflickr.com/8/7544/15842932026_0cf13be2e9_n.jpg

我花了一些时间处理进行图像处理并存储大量文件的应用程序。我的经验导致了这两个插件:

他们俩在一起将以适当且可扩展的方式做你想做的事。我强烈建议您阅读文档。我认为它们很容易使用,但它们不是新手级别。

答案 1 :(得分:0)

如果你的磁盘空间非常有限,但有足够的CPU /内存,这是一个不错的选择。如果你有磁盘空间而不是cpu / ram,那么我就不会这样做。

我为需要多尺寸图像的网站(这种情况很少见)所做的是将图像调整为2或3个所需尺寸并将其全部保存。在我的上传表中,我将网址保存到原始文件,调整大小和拇指。

需要更多细节?

答案 2 :(得分:0)

所以我最终发现,我觉得这是一个非常简洁的解决方案,我想与你分享。

事实证明,在CakePHP设置中,如果您请求URL(例如:" images / teaser / 17.jpg"),系统将首先检查该文件是否存在。如果没有,请求将通过Cake路由到(' controller' =>' images',' action' =>&# 39; teaser',17.jpg)。然后,我只需将该控制器设置为生成并保存图像,然后将其返回。

这样,我可以稍后添加新尺寸(即"预告片"),然后生成。

希望这有助于其他人。