【问题标题】:Generate thumbnail images at run-time when requested, or pre-generate thumbnail in harddisk?根据要求在运行时生成缩略图,或在硬盘中预生成缩略图?
【发布时间】:2011-04-05 14:50:54
【问题描述】:

我想知道,哪种管理缩略图图像的方式对 Web 服务器性能的影响较小。

这是场景:

1) 每个订单最多可以有 10 张图片。 2) 订单完成后图像不需要存储(最长期限为 2 周)。 3)潜在地,随时可能有几千个活跃订单。 4) 带有图片的订单会经常被客户光顾。

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

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

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

【问题讨论】:

    标签: image-processing thumbnails


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这取决于您的负载。如果资源被多次请求,那么缓存它是有意义的。

      总是要有图像吗?如果没有,您可以在第一次请求时创建它,然后将其缓存在内存中,或者更可能是数据库中,以供后续请求使用。

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

      【讨论】:

      • 缓存很多订单的图片,会不会消耗很多内存?
      • 在内存中?这取决于图像的大小以及您有多少可用内存。除非图像每小时请求数百次,否则最好将图像存储在磁盘上。非常便宜。读取图像的 IO 成本通常非常小,而且 HHD 的价格也很便宜。您甚至可以创建计划任务以在满足设置的过期条件(即 2 周过去)后删除图像。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 1970-01-01
        • 2015-08-24
        • 2010-12-31
        • 2012-04-22
        • 2013-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多