使用ASP.NET创建精灵图像
我有一个重大的性能问题。问题是在我的一个网站上有一个滑块,可以调用大约180幅图像。这180个图像中的每一个都由客户端浏览器通过单独的url下载。它们是GIF和jpg的混合体,我想将它们组合成一幅图像;最好是jpg,因为透明度不是问题。图像存储在SQL数据库中,并通过MVC控制器显示。我想这个精灵也可以通过MVC控制器创建,而不是更传统的通用ashx处理程序 我在谷歌上搜索了一下,发现了一个问题。这篇文章解释了如何组合检查图像,并做了我想做的事情。它写于2005年,所以我很好奇是否有更好的方法。我一直在另一个项目中使用ImageResizer。我听了与项目创始人的对话,谈到如何使用IIS和.NET调整图像大小。我从那个播客和我的经验中得知,.NET和IIS中的图像处理可能会变得很奇怪使用ASP.NET创建精灵图像,asp.net,asp.net-mvc,css-sprites,imageresizer,Asp.net,Asp.net Mvc,Css Sprites,Imageresizer,我有一个重大的性能问题。问题是在我的一个网站上有一个滑块,可以调用大约180幅图像。这180个图像中的每一个都由客户端浏览器通过单独的url下载。它们是GIF和jpg的混合体,我想将它们组合成一幅图像;最好是jpg,因为透明度不是问题。图像存储在SQL数据库中,并通过MVC控制器显示。我想这个精灵也可以通过MVC控制器创建,而不是更传统的通用ashx处理程序 我在谷歌上搜索了一下,发现了一个问题。这篇文章解释了如何组合检查图像,并做了我想做的事情。它写于2005年,所以我很好奇是否有更好的方法。
以这种方式调整图像大小并将其合并到精灵中仍然是一个好主意吗?我不想要精灵生成器,我想要一种高效的方法将.gif和jpg组合成一个可以用作精灵的图像。我不建议将所有内容组合成一个图像,因为你会延迟任何图像的“初始外观”,直到整个文件下载。最好让可见的内容尽快加载,并优化其余内容以获得总体吞吐量 例如,如果每个图像小于50KB,将它们组合为sprite图像可能是有意义的,但我建议一次组合10个。如果图像很小,比如每个5KB,一次30张是合理的 这里有一系列的瓶颈需要担心
IVirtualBitmapFile
。有关生成位图并让管道处理其余部分的简单示例,请参见
您必须定义url语法,并在FileExists和GetFile方法中查找它。类似于/combineimages.ashx?idlist=34,56,79,23&dir=horizontal&width=50&height=50
然后,您必须加载每个图像,将其大小调整为位图实例,并在分配的画布上绘制
大多数瓶颈可能是从SQL中提取图像。如果服务器上的RAM有限,串行方法可能比并行方法更安全(即,从SQL一次获取一个映像,调整大小并绘制它,处理数据,然后继续)。如果您的源图像一开始很小,那么多线程处理可能就可以了。请记住,即使是缓存在磁盘上,也需要使其快速运行,因为请求默认在30秒后超时。如果做得好,你应该能够在2秒内为一个10图像精灵提供一个空磁盘缓存,一旦缓存20毫秒
如果这看起来有点势不可挡,我会提供,但有一个队列
每个请求一个文件的方法有很多优点,在加入Sprite之前,不妨尝试ImageResizer的磁盘缓存和SqlReader插件。并不是说这是一种错误的方法,但未缓存的MVC+SQL可能会增加很多开销,这可能是原因之一。在您尝试增强的、尖端的、折叠成第四维代码之前,您希望我们中的一位发布,不如先试用Scott的解决方案,看看这对你是否有效?继续在Scott的博客上寻找最近对猫的打击:Scott Mitchell在这里也有一个演练:干杯。*我应该注意到,我通常不会宽恕对猫的打击。不幸的是,我在发布问题之前发现了这些。我想做的是比这低一级。不过谢谢。:-)