【问题标题】:Improve performance of AJAX with .NET使用 .NET 提高 AJAX 的性能
【发布时间】:2019-12-30 04:53:00
【问题描述】:

所以基本上情况就是这样:

我有一个无限循环,它调用一个 AJAX 请求 ( POST ),它每 5 秒提取一次最新的数据!它的作用是调用 Controller 以 JSON 格式获取其数据,如下所示:

    public string Reload(int id)
    {
        Room = db.Rooms.Find(id);
        return new JavaScriptSerializer().Serialize(Room);
    }

问题是,这条线:

Room = db.Rooms.Find(id);

成本很高,每 5 秒它会一遍又一遍地执行相同的查询...

有没有办法让控制器“记住”用户,这样他就不必一次又一次地执行相同的查询?

注意:我正在使用:ASP.NET MVC Web Application (.NET Framework) 4.6.1 with Identity。

【问题讨论】:

  • 请解释行so he won't have to do the same query again and again?
  • @JamshaidKamran 即使在请求完成后也要保持变量 Room 保持活动状态,因此下次用户激活 Reload 方法时,他可以在 O(1) 中获取 Room 变量而不是获取它来自数据库,
  • 首先,Marvell 有很多要回答的问题,infinity loop 我每次听到都会畏缩。其次,使用可以回调客户的协议或技术/框架。像信号员
  • costs a lot, every 5 seconds it does the same query over and over again... 我建议阅读MemoryCache
  • 如果你想“记住”用户以便保存查找,那么不断循环提供新数据的意义何在?

标签: c# asp.net .net ajax asp.net-mvc


【解决方案1】:

为您提供一些选择:

  • 使用 Service Worker(客户端),客户端可以自动为您缓存数据,但您必须对其进行设置并小心使其随会话过期等。
  • 如果您目前还没有准备好构建 Redis 或 Couchbase 集群,则可以使用 HttpRuntime.Cache 在服务器端构建自己的内存缓存解决方案。
  • 当您接受更改结果的 id 参数时,您还可以考虑启用和配置 Output Caching 以根据 URL 自动缓存它
  • 如果您使用的是 jQuery,还请查看 $.ajaxSetup cache 参数。

我的选择是输出缓存在设定的持续时间内因参数而异,所以我只产生负载,比如说,也许每小时一次?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多