ASP.NET性能优化之局部缓存

ASP.NET前后端用户安全管理技术全解析 本文系统介绍ASP.NET Core中用户管理的核心技术,涵盖注册登录、密码加密(PBKDF2)、JWT身份认证及AccessToken/RefreshToken机制。通过轻量级Web API项目演示,强调安全实践:密码明文不存储,使用加盐哈希;登录后生成带有效期的JWT令牌,结合短时效AccessToken与安全存储的RefreshToken实现无状态身份验证,提升系统安全性与用户体验。 阅读详情
核心提示:今天我们将谈到ASP.NET性能优化方面的问题,局部缓存的作用是为了解决某个特定区域需要经常更新,而其他区域更新不明显的问题。

  在网站的开发过程中,经常碰到的一类需求场景是:

  1:页面含热点新闻,热点新闻部分需要10分钟更新一次,而整个页面的其它部分1天内都不会变动;

  2:首页的某个BANNER需要显式:欢迎***;

  上面场景中的1,如果整个页面的缓存失效都定为10分钟,则势必增加性能开销,所以最好的策略是页面的不同部分采用不同的缓存失效时长。对于场景2也一样,我们不应该为了迁就某个BANNER不能应用缓存,就让整个页面都不支持缓存。

  可以说,如果我们在开发网站过程中的缓存策略是不支持页面局部缓存的,整个架构就是不合理的。

  一:局部缓存常用解决方案

  针对上面的需求,有几类解决方案:

  1、Client Side Includes(CSI):通过frame、iframe、 javascript、javacript+ajax等方式将另外一个页面的内容动态包含进来。像现在流行的jquery等javascript库对此有较好的支持。

  优点:能够利用浏览器客户端并行处理及装载的机制;通过浏览器缓存机制可以降低网络传输时间,提高性能;计算放在客户端,能够降低服务器端压力

  缺点:搜索引擎优化问题;javascript兼容性问题;客户端缓存可能导致服务器端内容更新后不能及时生效;XSS等安全隐患

  2、Server Side Includes(SSI):

  优点:SSI技术是通用技术,不受具体语言限制,只需要Web服务器或应用服务器支持即可,Ngnix、Apache、Tomcat、Jboss等对此都有较好的支持

  缺点:SSI在语法上不能够直接包含其他服务器的url(当然也可以通过redirect等来变通实现),因此在需要充分利用缓存及负载均衡的环境下相对不是很灵活。

  当然如果不使用单独的缓存服务器,而是使用Ngnix,利用Ngnix对SSI及Memcached支持,通过 NginxHttpSsiModule、 NginxHttpMemcachedModule也可以实现页面缓存,但与专业的缓存服务器(例如Varnish)相比较,Ngnix作为缓存服务器只适合于中小规模的场合。

  3、使用ASP.NET的片段缓存

  可以利用用户控件将页面分段,在ascx文件中写入缓存的语句,而不在aspx文件中写缓存语句,这样ASP.NET就可以只缓存ascx片断的输出了。

  缺点:片段缓存不支持Location特性;缓存页面片段惟一合法的地方是web服务器。这是因为片段缓存在ASP.NET中是新的功能,所以浏览器和代理服务器不支持。由于它不是W3C标准,像SQUID和VARNISH这样的代理服务器也不支持它。

  4、Edge Side Includes (ESI):

  Edge Side Includes(ESI) 和Server Side Includes(SSI) 和功能类似。SSI需要特殊的文件后缀(shtml,inc)。ESI可以直接通过URI包含远程服务器文件,ESI更适合用于缓存服务器上,缓存整个页面或页面片段,因此ESI特别适合用于缓存。本文要介绍的就是ESI的方式来支持局部缓存。

  优点:ESI是一个W3C标准,被当下流行的缓存服务器SQUID,Varnish支持。

  二:ESI的ASP.NET实现

  本文所要阐述的是ESI局部缓存的实现。主页面(test1.aspx)前台:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="WebApplication2.aspx.test1" %> 
  2. <%@ Import Namespace="System.Globalization" %> 
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4. <html xmlns="http://www.w3.org/1999/xhtml"> 
  5. <head runat="server"> 
  6. <title></title> 
  7. </head> 
  8. <body> 
  9. <div>这里是局部缓存</div> 
  10. <esi:include src="test2.aspx"/> 
  11. <div>局部缓存结束</div> 
  12. <%=DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo)%> 
  13. </body> 
  14. </html> 

  主页面的后台请参看上篇,对主页面采取了缓存策略,即在页面中使用esi:include标识。

  被包含的页面(test2.aspx)的前台:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="WebApplication2.aspx.test2" %> 
  2.  <%@ Import Namespace="System.Globalization" %> 
  3. <div> 

  局部缓存中的页面:

  

  1. <%=DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo)%> 
  2. </div> 

  

  被包含的页面的后台什么也不需要处理,也就是不为它加入任何缓存策略,该页面是实时的。

  VARNISH配置文件如下:

  1. backend default {  
  2. .host = "192.168.0.77";  
  3. .port = "80";  
  4. }  
  5. sub vcl_fetch {  
  6. remove beresp.http.Set-Cookie;  
  7. if(req.url ~ "test1.aspx") {  
  8. esi;  
  9. }  
  10. if(req.url ~ "test2.aspx"){  
  11. return (pass);  
  12. }  
  13. }  
  14. sub vcl_recv {  
  15. remove req.http.Cookie;  
  16. #remove req.http.Accept-Encoding;  
  17. #remove req.http.Vary;  
  18. }  
  19. sub vcl_hit {  
  20. if(req.http.Cache-Control~"no-cache"||req.http.Cache-Control~"max-age=0"||req.http.Pragma~"no-cache"){  
  21. set obj.ttl=0s;  
  22. return (restart);  
  23. }  
  24. return (deliver);  
  25. }  
  26. sub vcl_deliver {  
  27. if (obj.hits >0) {  
  28. set resp.http.X-Cache = "HIT";  
  29. } else {  
  30. set resp.http.X-Cache = "MISS";  
  31. }  
  32. } 

  上文的vcl_fetch函数中加了两个判断,指的是:如果碰到test1.aspx就处理esi标识,如果碰到test2.aspx,就直接忽略让后台IIS处理。

  值得注意的是,启动命令中加入了-p选项(这是一个varnish的小问题,请查阅参考,此处不表):

  varnishd -a :8011 -T :8088 -f c:/varnish/etc/default.vcl -p esi_syntax=0x1 -s file,c:/varnish/var/cache,100M

  三:效果

  启动varnish后,我们发现,对于test2.aspx,由于我们使用了esi对其进行了包含,而test2.aspx又未进行缓存,所以在 test1.aspx的缓存有效期内,随着每一次刷新,test1.aspx的内容没有变动,但是所包含的test2.aspx区域,会实时刷新。

ASP.NET中GridView与DetailsView联动实现主从表数据展示 再完美的设计也逃不过用户的“神操作”。我们必须提前应对各种异常情况。回顾整个流程,我们走过了这样一条路:🔧技术层:理解控件机制 → 配置数据源 → 实现主从联动⚡性能层:避免重复绑定 → 启用缓存 → 懒加载🎨体验层:CSS美化 → 局部刷新 → 弹窗交互🛡️健壮层:异常处理 → 参数校验 → 边界兜底最终打造出的,不是一个简单的“两个控件拼在一起”的页面,而是一个高内聚、低耦合、易维护、体验佳的企业级数据展示系统。 阅读详情

相关推荐

AD9361 Fast Lock实战:Python脚本自动生成Profile寄存器配置(附完整代码)

本文详细介绍了利用Python脚本实现AD9361 Fast Lock Profile寄存器自动化配置的实战方案。通过解析频率合成公式、VCO约束及查表机制,脚本能根据目标频率一键生成完整的16进制寄存器序列,大幅提升射频系统开发中多频点切换的效率和准确性,并支持CSV、JSON、C头文件等多种输出格式,便于与FPGA/嵌入式系统集成。

weixin_29194693的博客 475

NVelocity模板引擎在ASP.NET MVC电商项目中的实践

模板引擎是现代Web开发中实现视图层动态渲染的核心组件,其通过分离业务逻辑与展示逻辑提升工程可维护性。NVelocity作为Apache Velocity的.NET移植版本,采用基于文本的模板文件(.vm)实现运行时编译,特别适合需要频繁修改的电商促销页面等场景。该技术通过#foreach、#parse等指令实现动态数据绑定和模板复用,配合自定义Toolbox扩展可封装领域特定逻辑。在Suteki.Shop等电商系统中,NVelocity解决了传统ASPX视图引擎的重新部署痛点,支持热更新模板文件。虽然现代

weixin_32932149的博客 232

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 839

ConfigureAwait(false)的秘密:释放线程池压力的终极方案

掌握C#异步方法ConfigureAwait(false)作用,有效避免死锁并释放线程池压力。适用于类库开发、UI异步操作等场景,提升应用性能与响应性。合理使用可优化资源调度,值得收藏。

PoliSeed的博客 982

HFSS之天线设计实例

目录 矩形微带天线 微带天线尺寸计算 微带线的3个关键指标如以下 HFSS设计流程 新建工程并设置求解类型 天线建模 添加求解设置和扫频设置 天线建模步骤 谐振点查看 优化设计 查看天线分析结果 3D增益 Smith圆图 S参数 驻波比 ​ 平面增益 方向性系数\增益\轴比 矩形微带天线 微带天线的概念首先是由Deschamps于1953年提出来的,经过20年左右的发展,Munson和Howell于20世纪70年代初期制造出来了实际的微带天线 一个简单的...

ASH_GUARDIAN的博客 1万+

液晶屏LVDS接口:【图文详讲】

​LVDS(Low Voltage Differential Signaling,即低电压差分信号)接口又称RS-644总线接口,是20世纪90年代才提出的一种数据传输和接口技术。LVDS接口是美国NS美国国家半导体公司为克服以TTL电平方式传输宽带高码率数据时功耗大,电磁干扰大等缺点而研制的一种数字视频信号传输方式

weixin_66299220的博客 1万+

OutputCache缓存技术

大量的网站页面是采用动态的方式,根据用户提交的不同请求创建生成页面。正如我们所知的,动态页面有助于根据用户要求来提供定制的动态内容。动态页面也利于获取在数据库中每时每刻更新的资料。缺点是为每个用户请求生成同一页面增加了系统开销。 为克服此问题,一些网站用页面生成引擎对所有页面生成html静态页面。但这样生成的页面对所有用户的请求内容都是相同。 ASP.NET 提供了缓存技术有助于我们最大...

dianqianpang2137的博客 107

思科华三设备组网思科生成树PVST发BPDU导致全网闪断

一、故障现象 1.思科PVST BPDU报文导致全网闪断。 2.光衰低时不同品牌网络设备无法兼容导致接入交换机中断。 二、网络拓扑 图1 网络拓扑图 组网结构为H3C汇聚,接入交换机有思科,也有H3C,而且与汇聚直连的接入交换机下面串接了较多的交换机,或者hub。 三、排查思路 1.回忆一下最近做了什么事情,什么时候开始出的问题。 将网络汇聚交换机从思科换为H3C,H3C汇聚和思科接入对接出问题...

Silence_always的博客 7477

codeproject上一篇佳作缓存

In this article, I would like to share my experience and knowledge about ASP.NET Caching and how it can improve your website performance. As you all might know, performance is the key requirement for

fangyuan303687320的专栏 596

液压轴位置闭环控制(比例伺服阀应用)

液压阀的基础知识请参看下面的博客文章:PLC液压控制系列之比例流量阀结构分析_RXXW_Dor的博客-优快云博客比例流量阀液压同步控制的PID闭环调节可以参看下面这篇博文三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)_RXXW_Dor的博客-优快云博客液压控制系统在工业现场应用非常广泛,这篇博文我们简单分析下液压同步控制。这套系统的液压缸为单液压缸,首先简单介绍下什么是单作用液压缸,液压系统的详细理论分析大家可以找些专业书籍学习。

RXXW_Dor的博客 2264

捷联惯导,其实没有你想象的那么复杂!(附:惯导嵌入式应用中需要的一些C代码)

摘要:捷联惯导系统将惯性测量单元固连于运动载体,通过核心算法实现导航解算。系统首先进行传感器误差补偿和初始对准,然后利用陀螺和加速度计数据,通过姿态更新算法(如四元数法)计算载体相对于地理系的姿态。加速度数据经比力方程转换后积分得到速度和位置,过程中需补偿圆锥误差和划船效应。捷联惯导通过数字平台替代物理平台,实现了载体坐标系与导航坐标系的实时转换,是当前惯性导航系统的主流方案。

victoryqian528的博客 270

ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度。一、简单一行指令即可实现 <%@ OutputCache VaryByParam="none" Duration="300" %> 这样整个页面就被缓存了,由于我是首页进行的缓存,没有任何参数所以VaryByParam值设置为none,如果希望通过指定的参数来缓存内容可以设置"id;classid...

weixin_33810302的博客 175

pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案

本文主要介绍了pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]’ is not a valid editable requirement解决方案,希望能对使用markitdown的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

【转】asp.net mvc3 简单缓存实现sql依赖

asp.net mvc3 简单缓存实现sql依赖 议题 随 着网站的发展,大量用户访问流行内容和动态内容,这两个方面的因素会增加平均的载入时间,给Web服务器和数据库服务器造成大量的请求压力。而大量的数据 请求就需要强大的数据库处理能力来支撑。改进更加只能的程序,以极少不必要的数据库访问或动态处理请求,可以节省添加更多服务器的费用以及显著提高Web 应用程序的整体速度...

weixin_30481087的博客 76

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

web developer tips (22):提高页面和服务器控件加载速度

原文地址:How to improve performance of Page and Server Control Processing 1、避免不必要的客户端和服务器间的往返,你可以使用ASP.NET Ajax和局部页面呈现(Partial Page Rendering)。 ASP.NET Ajax:ASP.NET Ajax 允许开发者在创建一个asp.netweb应用的时候,更新数据不要...

weixin_30515513的博客 81

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

系统缓存描述

系统缓存的概述 有时候总听到大家说网站运行好慢,不知如何是好;有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其差。如何应对这种情况,充分利用系统缓存则是首要之道。 系统缓存有什么好处呢?举个简单的例子,你想通过网页查询某些数据,而这些数据并非实时变化,或者变化的时间是有期限的。例如查询一些历史数据。那么每个 用户每次查的数据都是一样的。如果不设置缓存,ASP...

sxty0220 博客之家 599

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#缓存处理

第一种方式: 在ASP.NET中页面缓存的使用方法非常的简单,只需要在aspx页的顶部加这样一句声明即可: <%@ OutputCache Duration="60" VaryByParam="none" %> Duration 缓存的时间(秒)。这是必选属性。如果未包含该属性,将出现分析器错误。 如果不加<...

367

系统缓存全解析 [转]

       有时候总听到网友说网站运行好慢,不知如何是好;有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差。没有“勤俭节约”的意识,势必会造成“铺张浪费”。如何应对这种情况,充分利用系统缓存则是首要之道。      系统缓存有什么好处呢?举个简单的例子,你想通过网页查询某些数据,而这些数据并非实时变化,或者变化的时间是有期限的。例如查询一些历史数据。那么每个用户每次查的数据...

爱码农爱生活 110

ASP.NET Core Tag Helper Image Link Script Partial Cache

Image Tag Helper 增强了标签,图像地址会增加唯一的缓存字符串,如果服务器上图像更改,服务器会返回最新的图像 属性 给img 添加src属性后,才能激活Image Tag Helper asp-append-version 用于生成缓存标识 <img src="~/images/asplogo.png" asp-append-version="true"> <img src="/images/asplogo.png?v=Kl_dqr9NVtnMdsM2MUg4qthUnW

小数点儿的博客 223

改善 ASP.NET MVC 代码库的 5 点建议

MVC,建议 刚刚检查完支持工单中的一些代码,笔者想针对 ASP.NET MVC 应用的改进写一些建议。这些内容仍在笔者脑海中,愿与各位一同分享。若你已使用 MVC 一段时间,那么以下内容可能并不新鲜。本文更适用于不常使用 MVC 或尚未充分了解 MVC 的读者。 假设以下场景:你想弄清楚一个网络应用在生产环境下为何消耗了 Web 服务器2GB 内存,于是,你将生产环境中运行的应用版本部...

weixin_30451709的博客 83

系统缓存全解析

本文转载自:http://www.cnblogs.com/ltp/archive/2009/06/30/1514311.html 作者:ltp 转载请注明该声明。 有时候总听到网友说网站运行好慢,不知如何是好;有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差。没有“勤俭节约”的意识,势必会造成“铺张浪费”。如何应对这种情况,充分利用系统缓存则是首要之道。 ...

zhengxiuchen86的博客 118

缓存(Cache)

什么是缓存? web应用程序可被多个用户访问。当用户少,负载低时,可提供快速的访问。当负载成倍增加时,响应就慢下来了。服务器响应慢是高负载网站最常见的问题。为了解决这个问题,我们常采用升级硬件配置,负载均衡,增加带宽等措施。但下载并不是响应慢的唯一原因。我们需要提供一种加快数据访问的机制,进而提升网站的性能。缓存提供了这种解决方案。缓存是种技术。我们可以把频繁使用的数据缓存或把网页临时缓存在本地...

weixin_34349320的博客 114
上一篇: ASP.NET性能优化之反向代理缓存
下一篇: 看似简单!解读C#程序员最易犯的7大错误
vrwind
博客等级 码龄15年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值