我们正在使用ImageResizer处理来自某些客户网站的图片并调整其大小。在大多数情况下,这非常有效,我们非常高兴。我们最近一直在努力解决的问题是,几个远程源真的非常慢。这不是产品的问题,但是我们喜欢一些关于如何更有效地使用它来处理这种情况的建议。
RemoteReader插件的(硬编码)超时时间为15秒,可以读取远程图像。大多数时候,这很充足。如果成功获取图像,则将其缓存在我们的Web服务器和CDN上,并且重复请求应该非常快。但是如果请求超时,抛出的异常将返回500,并且我们的Web服务器上没有任何内容(AFAIK)可以记住这一点。 CDN应该在一段时间内缓存错误响应,但通常重复的请求将继续激活这些下载图像的尝试,这将继续超时。
更糟糕的是,最大的罪魁祸首是请求最终会成功,但我们会看到几分钟的时间来下载(绝对意义上的)不是很大的图像。显然,我们不希望让用户等待那么久,但如果我们可以将该图像放入本地缓存中,那么下游请求将会很有效。
我不确定在不使用插件的情况下我们可以对这些行为施加多少控制。但是,如果我们缺少最佳实践,我很乐意解决这个问题。
有没有什么方法可以限制尝试加载失败的远程图像?
有没有办法允许从远程源进行异步传输?
如果我们要尝试构建这样的东西,是否有任何用于将内容注入DiskCache的API?
答案 0 :(得分:0)
有没有什么方法可以限制尝试加载失败的远程图像?
不在ImageResizer中,但是有IIS中间件可以做到这一点(我认为)(它是一般的HTTP事件;如果它们超过速率限制500块,则阻止URL)。
有没有办法允许从远程源进行异步传输?
我们提供异步HttpModule,但我认为你的意思是后台传输?您可以通过安排cron任务或仅向服务器发出HTTP请求来获取和缓存图像源来实现此目的。
如果我们要尝试构建这样的东西,是否有任何用于将内容注入DiskCache的API?
您使用的是SourceDiskCache吗?这会将原始映像缓存在磁盘缓存中。还有一个用于构建自定义磁盘缓存的方便基类。
不要害怕分叉。考虑到项目在这一点上的稳定性,Git使合并变得非常轻松。只要在宣布发布新版本时检查上游。我不确定在不使用插件的情况下我们可以对这些行为施加多少控制。但是,如果我们缺少最佳实践,我很乐意解决这个问题。