2011-09-22 64 views
2

在我的web应用程序我使用MongoDB的GridFS的存储用户上传的图片使用。MongoDB的GridFS的存储多个尺寸或在飞行中调整

网站的其余部分是由MySQL管理。

在相片表(在MySQL)我有用于存储所述文件对象的MongoId三个字段。

  • 媒体

所以我存储图像的三个版本。小,中,大。

我的问题是,有时我需要使用小于图像的小图像的缩略图(即在小部件框,消息头像等),否则我需要使用略小的版本介质图像。

所以我的问题是,最好是在GridFS系统中只存储一个图像,然后在存储MongoID的照片表中有一个字段,然后创建一个脚本来动态调整图像大小(即http://localhost/image/fetch/ {mongoid} ?调整= 50

否则,我的数据库,我需要thumbnail_50,thumbnail_100,medium_300,medium_400等等,等等

什么将是下降的影响上即时调整路线?是它坏的或有一个好主意吗?你会做什么?

感谢。

+0

我会得到最接近的大小,然后再处理它由JavaScript – halil

回答

4

动态调整大小会导致服务器上的CPU负载远大于调整大小为一次的大小,并存储结果。另一方面,提前调整大小可能会导致更大的一组数据存储在GridFS中。换句话说,这是一个折衷。

你可以考虑一种混合的方法,在这里你快速调整,但结果保存回GridFS的,这样你就不需要任何一个图像调整到给定大小不止一次。

你也应该知道,HTML和CSS允许控制图像的显示尺寸的各种选项。例如:

<img src="/path/to/image.jpg" width="50"/> 

将导致图像按比例缩放到50像素宽(在大多数现代浏览器中,无论如何)。您还可以使用widthmax-width CSS属性来控制图像大小。

对于我自己而言,对于要存储的图像的体积或文件大小一无所知,我可能会在添加图像时调整大小 - 换句话说,将页面速度和CPU负载命中一次 - - 然后使用max-width来控制屏幕尺寸,如果在特定情况下需要略微不同的尺寸,则使用GridFS中的各种尺寸。

+0

+1的宽度/高度属性 – Alfwed

+0

嘿,我确实可以使用宽/高属性的客户端大小,但它并不完全用这种方法来调整图像的最佳实践。此外,它会增加请求的大小。即如果我有一个宽度为100的图像,并且使用宽度的html属性调整为50,那么当我能够显示时,我将使用不必要的资源(授予,它不会很大,但会累加起来)一个图像的实际宽度是50.您的混合方法最值得关注。如果我走这条路线,我仍然需要在我的分贝中有多个字段。 – Flukey

+0

如果你想使用宽度或高度,你应该尝试选择与你的目标最接近的尺寸大于显示尺寸的图像(也就是说,不要把东西收缩得超过需要的尺寸,也不要伸展) 。大多数现代浏览器在调整图像大小时使用平滑,因此它们应该看起来“正常” - 但您的体验可能会有所不同。总是测试一些东西,确保它们能够按照你的要求工作! – dcrosta