ASP.Net - 多个动态图像。由于 Http 请求过多导致的性能问题

标签 asp.net performance image httphandler

我使用 HttpHandler 在 ASP.Net 网络应用程序中动态提供图像。 我有一个性能问题(Firfox/Firebug/YSlow 报告有太多的 HttpRequests)

在某些情况下,我每页有 50-100 张图片。3 个 TreeView (业务单位/类别/对象),每个节点都有自己的图片;)

每个项目的图片 url 都是动态设置的...

SomeImage.ImageUrl = "/image.axd?ImageId={0}";

注意:我只知道在运行时需要哪些图像。

附加:图像位于服务器文件系统、资源文件和数据库中 - 用户可以上传自己的图像以与我的系统对象相关联,ImageHandler 将动态确定每个图像位置)

在 web.config 中,httphandler 已配置并按预期工作... 添加 verb="GET"path="image.axd"type="Vision.OnsightManager.ImageHandler"

在 HttpHandler 中,原始图像字节被返回以响应每个图像请求。 所以在图像处理程序的 WriteResponse() 方法中,图像字节被返回,就像这样......

context.Response.BinaryWrite(bytes);

所有图像都正确显示,但应用程序在显示许多图像时出现预期的性能问题...

问题:

除了减少图像数量 ;),您推荐什么方法来最小化为每个图像生成的所有 HttpRequest?也许合并成一个 Http 请求?

我已经阅读了有关将多个 css 请求组合成一个请求、使用图像映射(单个组合图像和偏移量)等的文章,但似乎没有一个适合我的特定场景?

非常感谢!

最佳答案

减少服务器对重复请求的压力的一种方法是使用页面缓存能力。

在 HttpHandler 中的 Response.Write 之前添加:

// Set for how long you want the image to be cached.
context.Response.Cache.SetExpires(DateTime.Now.AddDays(1)); 
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetValidUntilExpires(true);
context.Response.Cache.VaryByParams["ImageId"] = true;

这将使服务器缓存结果(取决于 ImageId 参数)但这当然只会帮助重复请求相同的图像,而不是第一个,所以这取决于实际问题出在哪里。

在不太了解您的应用程序的情况下,听起来您必须更改几处才能找到更好的解决方案...

关于ASP.Net - 多个动态图像。由于 Http 请求过多导致的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/486924/

相关文章:

MySQL OR 和 ISNULL 性能不佳

javascript - 使用 jspdf 将图像添加到 PDF 会使图像变黑

php - 除了作为 blob 之外,是否有更节省空间的方式将图像存储在数据库中?

asp.net - 如何在 Visual Studio 2010 SP1 中打开 MVC 3 项目?

build-process - 诊断编译/构建缓慢原因的工具

c# - 代码隐藏更新 web.config 映射问题

sql-server - 在包含 varbinary(max) 数据的表中查询非 varbinary(max) 字段是否存在性能问题?

c - 不是 JPEG 文件 : Starts with 0x00 0x00

asp.net - 检查 SQL 行中是否有数据的最有效方法

asp.net - 在 ascx 用户控件中将 UI 与数据访问分离