我有一个 ASP.NET 网站,目前正在使用 .NET Framework 4。我正在用 C# 编程。没有 MVC,只有普通的旧 Web 表单。
问题
这是交易:有一个页面可能非常密集(加载缓慢),具体取决于用户在此列表中拥有的项目数量。(有点像愿望清单,但某些用户上面有 2000 多个项目)
这些物品是在网站上出售的产品。这些项目具有不同的功能和价格,并且有一个侧边栏,您可以在其中过滤您的列表。价格取决于很多因素,例如用户的 utm 来源/媒体/活动、当前正在进行的销售/促销等,并且是即时计算的。
最重要的是,您可以按价格范围进行过滤,并且每个过滤器都有一个小数字,指示属于它的商品数量。
例子:
$200 ~ $400 (130)
- 此价格范围内有 130 件商品
它目前正在工作,但如果用户有太多商品,页面可能会非常慢,因为我必须过滤和计算所有商品,并计算它们的价格。在第二次请求之后,由于缓存,一切都很快,但是有些用户在第一次加载时已经经历了超时,这是一件坏事。
我试过什么
页面本身有 3 个用户控件:
- 一种是列表菜单等
- 一个是侧边栏
- 一是产品清单
我在列表菜单中需要相同的信息,我需要在侧边栏中,我也需要在产品列表中。我决定同步加载产品列表的第一页,然后加载侧边栏和菜单。菜单上有项目的总数:希望和购买。
我可以通过 UpdatePanel 和 Timer 成功加载剩余信息。计时器以相对较快的间隔触发,并获得大约 100 个项目。它更新 HiddenField 中的当前状态,我在下一个请求中使用它来获取接下来的 100 个项目,直到我获得所有项目,然后停止计时器。
但是...当我按 F5 并再次加载它时,它会以相同的频率发出请求,因为 Timer 仍然存在。但由于信息已经被缓存,我什至根本不需要计时器。
我正在寻找一种解决方案,可以告诉服务器加载所有记录,但在此之前提供页面......然后客户端每 2 或 3 秒轮询一次服务器,并检查已经加载了哪些记录,并且相应地更新侧边栏和菜单列表。
有没有办法做到这一点?我查看了有关异步处理程序、SignalR、Comet 的文章,但我仍然一无所知...