我们正在构建一个主要基于图像库内容的sitecore应用。
目前,我们看到iOS上包含大量图片的网页性能下降。
我们的大多数图像都是精灵,但目前用户图像是逐个加载的。
有没有人想出一种方法从上传到sitecore的图片中生成精灵?
答案 0 :(得分:1)
我发现这篇blog帖子关于如何使用svg处理Sitecore中的精灵。
我希望它可以帮助您解决问题。
答案 1 :(得分:1)
之前我已就此主题做过一些概念性工作,但尚未找到时间进行真正的实施。但我会尝试分享一些关于如何做到这一点的想法。
首先,您必须识别应该在精灵中的图像。这可以通过遍历项目字段和可能的相关项目在页面请求中完成,或者如果您有任何其他逻辑可以获得此项目。如果列表是静态的,那么在发布时确定这个更好。基本上你需要每个图像guid,宽度和高度。您还需要了解您拥有的图像尺寸规则。精灵中的图像需要具有相似的宽度或高度。否则,如果没有大的空白区域就很难对它们进行分组。
当你拥有这组图像时,你可以获得MediaItems并找到构建sprite的html代码所需的信息。基本上是X和Y坐标,每个图像将位于精灵中,以便您可以正确渲染html。这也会导致一个对象包含创建精灵的所有信息。可以为此对象分配一个guid,您可以在图像URL中使用它来请求精灵。
请注意,如果您使用的是多服务器环境,则必须仔细查看要用于保存精灵数据的策略。例如,如果有的话,可以将它存储在Mongo中,或者使用可从所有内容交付服务器访问的数据库。在多服务器环境中,html请求可能位于一台服务器上,而图像精灵请求位于另一台服务器上,因此必须能够仅从图像URL中的信息中检索或构建精灵。 (这也是单个服务器环境中的最佳实践,但它变得更加简单)
然后你将创建一个获取sprite对象guid的图像请求处理程序,并从持久的sprite对象中获取媒体项,可选地执行调整大小等,并将它们渲染到Bitmap上。然后可以将Bitmap保存为jpg / png并缓存在磁盘(或其他合适的服务)上并返回给客户端。
当然,有很多不同的方法来完成这一部分,其中大部分都取决于您可以将哪些数据放入精灵(数据驱动,用户在当前项目或相关项目上精心挑选,使用个性化等等),如果你可以执行精灵对象的预计算并在发布时生成精灵,或者必须完成渲染时间,你的托管环境是什么样的等等。
希望这有帮助