Image Sitecore:为低带宽客户端提供低分辨率图像

Image Sitecore:为低带宽客户端提供低分辨率图像,image,caching,media,sitecore,resolution,Image,Caching,Media,Sitecore,Resolution,我正在寻找一种简单的方法来为移动浏览器提供低分辨率图像。我想动态生成这些质量较低的图像,并将它们存储在媒体缓存中,供类似浏览器使用。有什么好的方法来实现这一点吗?(注意:我们网站上到处都有sc:image标签,我想避免更改这些标签。)对,有趣的问题!让我们将其分为两个需要处理的问题:较低质量的图像生成和缓存 低质量图像 为此,我将考虑在getMediaStream管道中添加一个新处理器。该处理器可以检查传入请求的UserAgent,并相应地对图像进行重新采样。例如,如果它确定浏览器是标准桌面浏览

我正在寻找一种简单的方法来为移动浏览器提供低分辨率图像。我想动态生成这些质量较低的图像,并将它们存储在媒体缓存中,供类似浏览器使用。有什么好的方法来实现这一点吗?(注意:我们网站上到处都有sc:image标签,我想避免更改这些标签。)

对,有趣的问题!让我们将其分为两个需要处理的问题:较低质量的图像生成和缓存

低质量图像

为此,我将考虑在getMediaStream管道中添加一个新处理器。该处理器可以检查传入请求的UserAgent,并相应地对图像进行重新采样。例如,如果它确定浏览器是标准桌面浏览器,它将不执行任何操作,但如果它是移动浏览器,它将获取图像流并使用重新采样的图像创建一个新的图像流

看一看,其中显示了如何将自己的处理器添加到管道中。此外,您还可以在Sitecore.Resources.Media.ResizeProcessor上思考一下如何做到这一点

缓存

查看Sitecore媒体缓存的代码,它使用请求的当前媒体选项为缓存生成唯一密钥。MediaOptions有一个CustomOptions属性,它是一个字符串字典,您在其中添加的任何内容都将在哈希中用于创建密钥

我将考虑扩展用于图像处理的处理程序,重写ProcessRequest方法并获取请求的当前MediaOptions。此时,您可以识别浏览器(第一部分使用类似的代码,您可以共享此逻辑),如果是移动浏览器,您可以在MediaOptions的字典中插入一些内容,例如“mobile”:“1”。然后您只需调用base.ProcessRequest方法,让标准流程继续

显示了扩展MediaRequestHandler的示例


希望这会有所帮助,我还没有详细研究它,可能有一些潜在的问题我已经忽略了,但希望这足以让你开始。这是一段代码,但它似乎是一个很好的库,有很多重用的可能性,您不需要在整个站点上更改标记。

Wow。好消息。我们迫切需要减少主页的带宽,我们解决了这个问题。我们决定与51度基金会一起确定设备类型,然后,如果它是一个手持设备,我们将为主页画廊提供更少的图像。很快就能确定,我们很快就会为网站的其余部分重新考虑这个问题。如果你认为回答你的问题是可以接受的,请考虑将它标记为可接受的答案: