ImageResizer .net用于多个产品图像性能问题?

时间:2013-08-14 12:34:37

标签: asp.net-mvc imageresizer

我正在使用产品页面构建Asp.Net MVC4应用程序。我来到ImageResizer图书馆来处理和提供图片。我的页面尺寸为jpg缩略图160x160px,每个尺寸为3~5KB。 据我所知,使用ImageResizer库我可以上传原始的大型产品图像600 x 600px& 10~20KB并在访问者请求页面时动态调整大小到缩略图大小。类似的东西:

<img src="@Url.Content("~/images/imagename?width=160&height=160")" alt="">

我理解这对几张图片很好,但我的产品页面包含20到100个产品jpg独特的缩略图(取决于pagesize)。 每次处理20-100张图片时,性能是否会受到影响?有没有人遇到类似的情况?在上传过程中,我总是可以返回并生成2个不同的图像(缩略图和大图),但如果我能够只使用每个产品一个图像并动态调整大小,我就非常好。 当我说性能时,我的意思是任何超过0.5 - 1秒的额外响应时间对我来说都是禁忌。

2 个答案:

答案 0 :(得分:1)

在文档中提到,有缓存插件,可以将性能提高100-10000X:

  

每个面向公众的网站都需要磁盘缓存来动态调整大小的图像(不,ASP.NET的输出缓存不起作用)。该模块速度极快,但解码原始图像需要大量连续的RAM(通常为50-100MB)。由于它需要连续的,非分页的,非分段的RAM,因此不能使用(D)DOS攻击向量,但它确实意味着存在基于RAM的限制,可以处理多少并发图像处理请求。 DiskCache插件通过将缓存文件的服务委托给IIS并利用哈希树磁盘结构来提高吞吐量100-10,000X。它可以轻松扩展到100,000种变体,可以使用多达一百万个图像。它是Performance版的一部分,售价249美元。 DiskCache插件要求您使用URL API(阅读原因)。

http://imageresizing.net/plugins/diskcache
http://imageresizing.net/docs/basics

答案 1 :(得分:0)

说到网站,每个可以缓存的操作都应该是。这允许服务器处理更多访问者而不是更多处理。

您可以使用ImageResizer的缓存插件,也可以使用某个文件名手动写入文件,例如:product_154_180x180.jpg其中154是产品ID,180是宽度和高度,然后检查它是否存在想要显示它。

如果您执行后者,您可以使用服务器为您管理,通过链接到页面源中的预期文件名,如果它不存在,服务器将调用调整大小的脚本并使用imageresizer将调整大小的图像写入磁盘。

最后一种方法也可以避免对ImageResizer的调用,从而节省一些处理能力。