在请求时在运行时生成缩略图图像,或者在硬盘中预生成缩略图?

时间:2010-08-30 05:53:14

标签: image-processing thumbnails

我很想知道,管理缩略图的方式对网络服务器性能的影响较小。

这是情景:

1)每个订单最多可以有10个图像。 2)订单完成后无需存储图像(最长期限为2周)。 3)可能,任何时候都可能有几千个有效订单。 4)客户经常访问带图片的订单。

IMO,在硬盘中预先生成缩略图是一个更好的解决方案,因为即使使用RAID,硬盘也会更便宜。

但是,磁盘I / O速度和加载图像所需的资源呢?它会比实时生成缩略图需要更多的资源吗?

如果您能分享您的意见,我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果客户经常访问订单,最好创建缩略图并存储在磁盘上。这样,网络服务器就不需要处理那么长的页面。它将加快您的网页加载时间。

答案 1 :(得分:1)

这取决于你的负担。如果多次请求资源,则缓存它是有意义的。

是否总会有图像?如果没有,您可以在第一个请求中创建它,然后将其缓存在内存中,或者更可能是数据库中,以用于后续请求。

但是,如果您总是需要每个订单存在n个图像,和/或您定期创建多个订单,那么最好将缩略图创建传递给工作线程或某种异步页面。这样,可以堆叠多个请求,从而减少服务器上的负载。

答案 2 :(得分:1)

我建议将两者结合起来 - 动态生成和磁盘缓存。这可以防止未使用的图像浪费空间,但绝对不会为重复请求的图像增加开销。 SQL和mem缓存不是很好的选择,都需要太多RAM。 IIS可以从磁盘提供大型图像,而只使用100k的RAM。

在创建http://imageresizing.net时,我发现了29 image resizing pitfalls,其中很少是显而易见的。我强烈建议阅读清单,即使它有点无聊。您需要一个HttpModule才能将缓存的请求传递给IIS。

虽然 - 为什么重新发明轮子? ImageResizer库被广泛使用并经过充分测试。