编写高性能 Web 应用程序的 10 个技巧
日期:2007年11月6日 作者: 查看:[大字体 中字体 小字体]-
返回页首
技巧 6 — 后台处理
通往代码的路径应该尽可能快速,是吗?可能有时您会觉得针对每个请求执行的或者每 n 个请求执行一次的任务所需资源非常多。发送电子浏览或者分析和验证传入数据就是这样的一些例子。
剖析 ASP.NET Forums 1.0 并重新构建组成社区服务器的内容时,我们发现添加新张贴的代码路径非常慢。每次添加新张贴时,应用程序首先需要确保没有重复的张贴,然后必须使用“坏词”筛选器分析该张贴,分析张贴的字符图释,对张贴添加标记并进行索引,请求时将张贴添加到合适的队列,验证附件,最终张贴之后,立即向所有订阅者发出电子邮件通知。很清楚,这涉及很多操作。
经研究发现,大多数时间都花在了索引逻辑和发送电子邮件上。对张贴进行索引是一个非常耗时的操作,人们发现内置的 System.Web.Mail 功能要连接 SMYP 服务器,然后连续发送电子邮件。当某个特定张贴或主题领域的订阅者数量增加时,执行 AddPost 功能所需的时间也越来越长。
并不需要针对每个请求都进行电子邮件索引。理想情况下,我们想要将此操作进行批处理,一次索引 25 个张贴或者每五分钟发送一次所有电子邮件。我们决定使用以前用于对数据缓存失效进行原型设计的代码,这个失效是用于最终进入 Visual Studio? 2005 的内容的。
System.Threading 命名空间中的 Timer 类非常有用,但是在 .NET Framework 中不是很有名,至少对于 Web 开发人员来说是这样。创建之后,这个 Timer 类将以一个可配置的间隔针对 ThreadPool 中的某个线程调用指定的回调。这就表示,您可以对代码进行设置,使其能够在没有对 ASP.NET 应用程序进行传入请求的情况下得以执行,这是后台处理的理想情况。您还可以在此后台进程中执行如索引或发送电子邮件之类的操作。
但是,这一技术有几个问题。如果应用程序域卸载,该计时器实例将停止触发其事件。另外,因为 CLR 对于每个进程的线程数量具有一个硬性标准,所以可能会出现这样的情形:服务器负载很重,其中计时器可能没有可在其基础上得以完成的线程,在某种程度上可能会造成延迟。ASP.NET 通过在进程中保留一定数量的可用线程,并且仅使用总线程的一部分用于请求处理,试图将上述情况发生的机会降到最低。但是,如果您具有很多异步操作时,这可能就是一个问题了。
这里没有足够的空间来放置该代码,但是您可以浏览一个可以看懂的示例,网址是 www.rob-howard.net。请了解一下 Blackbelt TechEd 2004 演示中的幻灯片和演示。
返回页首
技巧 7 — 页输出缓存和代理服务器
ASP.NET 是您的表示层(或者说应该是您的表示层);它由页、用户控件、服务器控件(HttpHandlers 和 HttpModules)以及它们生成的内容组成。如果您具有一个 ASP.NET 页,它会生成输出(HTML、XML、图像或任何其他数据),并且您针对每个请求运行此代码时,它都会生成相同的输出,那么您就拥有一个可用于页输出缓存的绝佳备选内容。
将此行内容添加页的最上端
<%@ Page OutputCache VaryByParams="none" Duration="60" %>
就可以高效地为此页生成一次输出,然后对它进行多次重用,时间最长为 60 秒,此时该页将重新执行,输出也将再一次添加到 ASP.NET 缓存。通过使用一些低级程序化 API 也可以完成此行为。对于输出缓存有几个可配置的设置,如刚刚讲到的 VaryByParams 属性。VaryByParams 刚好被请求到,但还允许您指定 HTTP GET 或 HTTP POST 参数来更改缓存项。例如,只需设置 VaryByParam="Report" 即可对 default.aspx?Report=1 或 default.aspx?Report=2 进行输出缓存。通过指定一个以分号分隔的列表,还可以指定其他参数。
很多人都不知道何时使用输出缓存,ASP.NET 页还会生成一些位于缓存服务器下游的 HTTP 标头,如 Microsoft Internet Security and Acceleration Server 或 Akamai 使用的标头。设置了 HTTP 缓存标头之后,可以在这些网络资源上对文档进行缓存,客户端请求也可在不必返回原始服务器的情况下得以满足。 - 上一页 [1] [2] [3] [4] [5] [6] 下一页
-
- 编写高性能 Web 应用程序的 10 个技巧 相关文章:
- ·Java编写的计算器程序及源代码(1)
- ·C#编写的windows计算器-源代码
- ·Windows下C语言网络编程快速入门
- ·VBA编程简化Excel操作的两个实例
- ·ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!
- ·Windows编程基础 - 概述
- ·深入浅出.NET泛型编程
- ·WINDOWS编程基础
- ·linux内核编译详解
- ·剪辑数字影像 影像编辑软件大荟萃
- 编写高性能 Web 应用程序的 10 个技巧 相关软件
- ·C语言编程宝典之一
- ·《雅奇MIS》可视化自动编程系统 V10.0
- ·MathType 数学公式编辑器 V5.2 汉化版
- ·delphi编程手册 V3.0
- ·Lrc歌词编辑器2006 V12.26
- ·Autop+线切割编程系统 V4.47
- ·vc-mfc编程实例
- ·姑妄言汇编
- ·ICO图标提取编辑专家 V4.7
- ·JP-Word简谱编辑 V3.0
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:四篇IIS的中级技巧
下一篇:中国是谁的天堂?一个牛人的牛话
精品推荐
热点TOP10
- ·1394网络适配器是什么东西?
- ·知道对方的ip地址,如何查具体物理地址?
- ·arp.exe是什么
- ·XSL/XML网页制作入门,入门到精通
- ·素材网站、优秀设计素材大全
- ·初学者入门:如何学习网页制作?
- ·jsp Smart Upload上传下载全攻略
- ·常用网页使用js技巧收集(200多个)
- ·WINDOWS编程基础
- ·为什么打开网页那么慢?
- ·请问如何查出我被人限制网速~~~
- ·常见弹出代码集合
- ·制作网站的步骤和方法
- ·网页版面设计
- ·站长常用广告代码的表达大全(不断更新中,希望收藏本页)
- ·网页对联广告代码大全
- ·ADSL登录是错误,出现691是什么意思
- ·手把手教你做网站必备的六步
- ·怎么样才能访问到局域网其他的机器
- ·求一款免费制造网页的软件!
特别推荐
- ·常见弹出代码集合
- ·国内外cms网站大全
- ·CSDN 总结 精华 ASP 代码
- ·编写高性能 Web 应用程序的 10 个技巧
- ·制作网页需要学习哪些技术?
- ·再次举例熟悉网页的头部信息表示涵义
- ·英文版本的cms大全
- ·ASP.NET中应用XML技术实现Web报表打印
- ·web标准常见问题大集合
- ·mssql数据库操作手册-全是精髓
- ·怎么让网页插入FLASH居中显示啊?代码!
- ·推荐FTP软件LeapFTP使用教程
- ·ADSL登录是错误,出现691是什么意思
- ·初学者入门:如何学习网页制作?
- ·ADSL宽带LINK灯闪
- ·jsp Smart Upload上传下载全攻略
- ·怎么样才能访问到局域网其他的机器
- ·服务器安装Zend Optimizer的方法
- ·信了你的邪-阿彪就能装上iis组件
- ·手把手教你做网站必备的六步
