gpt4 book ai didi

c# - 如何在不断检查进度的同时在 ASP.NET 4 中异步加载页面?

转载 作者:行者123 更新时间:2023-11-30 18:32:25 26 4
gpt4 key购买 nike

我有一个 ASP.NET 网站,目前正在使用 .NET Framework 4。我正在使用 C# 进行编程。没有 MVC,只有普通的旧 Web 表单。


问题

事情是这样的:有一个页面可能非常密集(加载缓慢),具体取决于用户在此列表中拥有的项目数量。 (有点像愿望 list ,但某些用户上面有 2000 多个元素)

这些项目是在网站上出售的产品。这些项目具有不同的功能和价格,并且有一个侧边栏,您可以在其中过滤您的列表。价格取决于很多因素,例如用户的 utm 来源/媒体/事件、当前正在进行的销售/促销等,并且是即时计算的。

最重要的是,您可以按价格范围进行过滤,我们对每个过滤器都有一个小数字,表示属于它的商品数量。

例子:

$200 ~ $400 (130) - 这个价格范围内有 130 件商品


它目前正在运行,但如果用户有太多商品,页面可能会非常慢,因为我必须对它们进行过滤和计数,然后计算它们的价格。第二次请求后,由于缓存的缘故,一切都很快,但有些用户在第一次加载时已经出现超时,这是一件很糟糕的事情。


我尝试了什么

页面本身有 3 个用户控件:

  1. 一个是列表菜单等
  2. 一个是侧边栏
  3. 一个是产品列表

我在列表菜单中需要的相同信息,我需要在侧边栏中,我也需要在产品列表中。我决定同步加载产品列表的第一页,然后加载侧边栏和菜单。菜单包含项目总数:希望的和购买的。

我可以通过 UpdatePanel 和 Timer 成功加载剩余信息。计时器以相对较快的间隔触发,并获得大约 100 个项目。它更新 HiddenField 中的当前状态,我在下一个请求中使用它来获取接下来的 100 个项目,直到我获得所有项目,然后停止计时器。

但是...当我按 F5 并再次加载它时,它会以相同的频率发出请求,因为计时器仍然存在。但由于信息已经缓存,我什至根本不需要计时器。

我正在寻找一个可以告诉服务器加载所有记录的解决方案,但在此之前提供页面......然后客户端将每 2 或 3 秒轮询一次服务器,并检查哪些记录已经加载,并相应地更新侧边栏和菜单列表。

有什么办法吗?我已经查看了有关 Async Handlers、SignalR、Comet 的文章,但我仍然一无所知...

最佳答案

看起来您需要缓存和 AJAX 调用的组合。

您提到缓存——您是手动执行还是利用浏览器/.NET 的内置功能?

您可能想要查看数据库级优化。索引和使用 SQL Management Studio 来评估查询执行计划(它将告诉您查询中最耗时的部分)在这里会非常有帮助。您甚至可以设置聚合表来表示您的用户通常对数据求和或计数的总和和计数。

我认为缓存大约占您工作的 90%。通过 AJAX 检索数据不会使其变得更快,但如果您的逻辑不是连续的,它可以让您一次做多件事。

我会先调查您可以做什么来调优您的数据库,然后看看您可以在那里获得什么 yield 。

关于c# - 如何在不断检查进度的同时在 ASP.NET 4 中异步加载页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com