查看 ASP.NET 性能优化的状态缓存

ASP.NET 视图状态是一项内置功能,它通过在客户端请求的完整往返之间保留页面和控件的值来管理客户端状态。这使得即使在 HTTP 等无状态协议上,也能实现有状态的编程能力。

此状态以 Base64 编码字符串的形式存储在页面的隐藏字段中,作为发送给客户端的每个响应的一部分。客户端会将其作为回发的一部分返回给服务器。

<input id = "__VIEWSTATE"
       type = "hidden"
       name = "__VIEWSTATE"
       value = "/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBD
              xYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50Lld
              lYkNvbnRyb2xzLlNQQ29udHJbE1vZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD
              2...=="/>

虽然 ASP.NET 视图状态非常有用,但它也存在一些需要解决的问题。这些问题将在下文中讨论。

  1. ASP.NET 视图状态通常占用大量资源: 当您的 ASP.NET 应用程序页面上有大量功能丰富且繁重的控件和小部件时,大量数据会在浏览器和 Web 服务器之间来回传输。这种繁重的负载会导致 ASP.NET 应用程序性能下降并增加带宽成本。
  2. ASP.NET View State 存在安全风险: 将机密数据作为视图状态的一部分发送给客户端也会带来安全风险。这些数据容易受到攻击,攻击者可以篡改这些数据。您可以对 ASP.NET 视图状态数据进行加密,但这同样会降低性能。

NCache ASP.NET 视图状态

解决这些 ASP.NET 视图状态问题的一种方法是存储实际的视图状态。 ASP.NET 视图状态 在 Web 服务器上,它会向浏览器发送一个唯一的令牌(或 ID)。这样,浏览器下次就可以将此令牌发送回 Web 服务器。然后,Web 服务器使用此令牌在其存储中查找正确的 ASP.NET 视图状态。以下是一个令牌使用示例。

<input type = "hidden"
       name = "__VIEWSTATE"
       id = "__VIEWSTATE"
       value = "vs:cf8c8d3927ad4c1a84da7f891bb89185" />

虽然 ASP.NET 视图状态可以存储在 Web 服务器上,但当 ASP.NET 应用程序运行在负载均衡的 Web 服务器集群中时,这种做法并不理想,因为下一个 HTTP 请求可能会发送到另一个 Web 服务器。因此,必须将 ASP.NET 视图状态存储在所有 Web 服务器均可访问的共享存储库中。

分布式缓存存储 ASP.NET 视图状态 - NCache
图 1:分布式缓存存储 ASP.NET 视图状态

在服务器上存储 ASP.NET 视图状态的最佳位置是…… 分布式缓存. 这样,您不仅可以为所有 Web 服务器拥有一个公共存储,而且您还可以拥有一个极其 快速且可扩展的内存存储 与 SQL Server 数据库或其他存储选项相比。

NCache 是一个适用于 .NET、Java、Python 和 Node.js 的极速且可扩展的分布式缓存。它还允许您存储 ASP.NET 视图状态 来解决上述问题。

在 ASP.NET 中配置视图状态 NCache

要配置 ASP.NET 视图状态,您需要安装 AspNet.ViewState。NCache NuGet软件包 作为先决条件。然后您需要配置 应用浏览器 文件 NCache 插入页面适配器。接下来,您需要 配置 web.config 文件 在您的应用程序中注册视图状态以进行配置,并指定先前注册的配置部分的设置。请参阅 NCache ASP.NET 视图状态文档 用于逐步配置。

如果相同的缓存用于视图状态缓存和其他数据,您可以 获取视图状态数据 通过使用 NC_ASP.net_viewstate_data 标签:

Hashtable allViewStateData = cache.SearchService.GetByTag(new Tag("NC_ASP.net_viewstate_data"));

在服务器上缓存 ASP.NET 视图状态的好处

通过缓存 ASP.NET 视图状态,您可以获得以下好处: NCache.

  1. 提高 ASP.NET 性能: NCache 减少请求/响应负载,从而提高整体请求时间。
  2. 降低带宽成本: 更小的有效载荷也意味着带宽消耗成本的显著降低。这可以帮你省下一大笔钱。
  3. 安全性: 现在 ASP.NET 视图状态编码字符串不再发送到浏览器,因此不再存在任何安全风险。
  4. 快速且可扩展的 ASP.NET 视图状态存储: NCache 是一个速度极快且可扩展的分布式缓存。这意味着 ASP.NET 永远不会因为 ASP.NET 视图状态存储而面临任何可扩展性瓶颈。
  5. 通过复制实现 ASP.NET 视图状态可靠性: NCache 它会智能地复制分布式缓存中的所有数据。这意味着即使缓存服务器宕机,您也不会丢失任何 ASP.NET 视图状态。

高级 ASP.NET 视图状态缓存功能 NCache

NCache 它提供了一套丰富的功能,用于缓存和管理 ASP.NET 视图状态。以下是这些功能的列表。

  1. 最小尺寸阈值: NCache 允许您指定 ASP.NET 视图状态的最小大小,例如: 视图状态阈值。任何小于此值的视图状态都不会被缓存。这使您能够仅缓存大量视图状态。
  2. 将 ASP.NET 视图状态与会话状态关联起来: 您可以将 ASP.NET 视图状态与会话状态关联起来(过期ViewstateWithSession)。这样,当用户会话过期时,所有视图状态都会自动从缓存中删除。
  3. 页级最大计数阈值: 您可以使用 FIFO 来配置为给定页面保留的视图状态数量。这样,每当为该页面创建新的视图状态时,最旧的视图状态都会被移除。这可以避免存储不必要的视图状态,从而优化缓存服务器的内存消耗。
  4. 会话级别最大计数阈值: 与页面级别类似,您可以按照 FIFO 方式指定用户会话的最大视图状态计数, 每会话最大浏览状态数. 这样,每当创建新的视图状态时,都会删除最旧的视图状态。
  5. 页面级和会话级设置: 您可以为每个页面以不同的方式指定所有上述设置,或者使它们对所有会话保持通用。

结语

如您所见, NCache 它允许您在服务器端缓存 ASP.NET 视图状态,从而优化 ASP.NET 的性能。它还提供了一套丰富的功能,用于更高效地管理缓存中的 ASP.NET 视图状态。这使您可以开发复杂的应用程序,并利用这些功能来应对各种不同的场景。

接下来做什么?

联系我们

联系电话

+1 214-619-2601 (美国)

+44 20 7993 8327 (英国)

©版权所有 Alachisoft 2002 - 版权所有。 NCache 是 Diyatech Corp. 的注册商标。