【问题标题】:asp.net website performance - 1 page slow affects rest of the pages on same browser sessionasp.net 网站性能 - 1 页慢会影响同一浏览器会话中的其余页面
【发布时间】:2017-05-01 12:31:34
【问题描述】:

我正在优化 asp.net mvc 网站。这是一个托管在 azure webapp 中的会员门户。

我在排除故障时注意到以下问题:

  1. 使用 chrome 打开一个页面,该页面会进行长时间运行的 ajax 调用。微调器旋转
  2. 在等待数据返回时,在同一浏览器会话的新选项卡上打开另外几个简单页面。这样做时,简单页面不会立即响应。

  3. 在新浏览器 IE 或 firefox 上打开网站的同时。页面加载正常。

问题:

  1. 这是浏览器问题还是编码问题?
  2. 上面的每一步都是一个 Ajax 调用。我认为在等待 ajax 调用时,其余页面的响应速度应该很快。

任何推荐都会很好。

【问题讨论】:

    标签: jquery asp.net ajax performance azure


    【解决方案1】:
    1. 这是浏览器问题还是编码问题?

    没有。

    1. 上面的每一步都是一个 Ajax 调用。我认为其他页面在 ajax 调用等待时响应应该很快。

    不一定。如果您使用的是 ASP.NET 会话状态,您应该知道它们不是线程安全的,并且框架根本不允许您有来自同一会话的 2 个并发请求。这是设计使然。您可以在官方文档中阅读更多相关信息:https://msdn.microsoft.com/en-us/library/ms178581.aspx

    对 ASP.NET 会话状态的访问是每个会话独占的,这意味着 如果两个不同的用户同时发出请求,访问每个 同时授予单独的会话。但是,如果两个并发 请求是针对同一个会话(通过使用相同的 SessionID 值),第一个请求获得对会话的独占访问权 信息。第二个请求仅在第一个请求之后执行 完成了。 (如果独占,第二个会话也可以访问 对信息的锁定被释放,因为第一个请求超过了 锁定超时。)如果@Page中的EnableSessionState值 指令设置为 ReadOnly,请求只读会话 信息不会导致对会话数据的排他锁定。 但是,会话数据的只读请求可能仍需等待 用于清除会话数据的读写请求设置的锁。

    因此,如果您的慢速 AJAX 请求需要写入会话状态,您可以忘记从该会话中并行处理其他请求。这也解释了为什么您可以从另一个浏览器收到并行请求 - 这是一个不同的会话。

    这就是您永远不应使用 ASP.NET 会话的数百万个原因之一。

    任何推荐都会很好。

    只需从您的应用程序中禁用 ASP.NET 会话状态,然后从您的代码库中删除所有 Session["xxx"] 调用:

    <sessionState mode="Off" />
    

    【讨论】:

    • 如果我们禁用会话状态,我们如何管理会话?还有它的 asp.net mvc 应用程序
    • 这在很大程度上取决于您的应用程序要求和架构。它是 ASP.NET MVC 并不重要 - 在幕后它使用 ASP.NET 基础结构并共享相同的会话陷阱。
    • 我们需要管理会话,在 asp.net 中唯一的方法是使用会话状态提供程序。在我们的例子中是 redis 提供者
    • 好的,所以如果您唯一的方法是使用 ASP.NET 会话,那么您现在有了答案,为什么您不能有来自同一会话的 2 个并发请求。这是设计使然。不是你问的吗?可以通过多种方式在 Web 应用程序中管理会话状态:它可以保存在客户端上,它可以保存在分布式服务器端缓存中,......不幸的是,您选择了最简单的代码解决方案(ASP .NET 会话),但存在上述限制。
    • 它会影响那些根本不从 Session 写入/读取的控制器吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 2012-04-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2013-02-10
    相关资源
    最近更新 更多