所以我正在建立一个网站,它将收藏大量基于CakePHP的大量不同尺寸图片的文章。我想出了一个通过后端上传图片的方案,然后保存原件。现在每次需要图像时,都会使用图像ID和请求的大小调用图像控制器,然后生成并返回该图像。显然这很重,但我想像Cake可以缓存对我的请求结果。显而易见的好处是,在未来添加新的图像尺寸将是轻而易举的。
但即使有缓存,它仍然会变得沉重吗?我仍然会做很多请求,即使响应会被缓存。那么,好主意还是坏主意?
答案 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)。然后,我只需将该控制器设置为生成并保存图像,然后将其返回。
这样,我可以稍后添加新尺寸(即"预告片"),然后生成。
希望这有助于其他人。