如何增强ASP程序性能
作者: 甘冀平 www.ASPCool.com 时间:2004-12-10
qq空间做网络硬盘滁州人事编制网浙江大华技术 ?甘冀平 ?
简介
性能是一个很重要的特征 D阈枰孪壬杓坪眯阅苤副辏裨蛉蘸缶鸵酥匦卤嘈闯绦?>褪撬担阂柘牒迷跹罴鸦刂葱蠥SP程序?
本文提出了一些优化ASP应用和VBScript的技巧,许多技巧和缺陷都经过了研讨 U饫锪谐龅慕ㄒ橐丫趆ttp://www.microsoft.com 和其他站点上进行了测试,都工作得非常好 1疚募偕枘憔弑窤SP开发的基本知识,包括VBScript或者JScript,ASP应用程序,ASP Session,以及其他ASP内置对象(Request,Response和Server) ?
通常,ASP的执行性能远远不仅仅依赖ASP代码本身?在本文的尾部列出了与性能相关的资源,它们含概了ASP和非ASP的部分,包含ActiveX Data Objects(ADO),Component Object Model(COM),数据库(Database),以及Internet信息服务器(IIS)的配置 3苏庑褂幸恍┓浅:玫牧唇又档媚阋豢??
技巧1:在Web服务器上缓存经常使用的数据
牙齿有黑斑美国科幻电影冰封王座秘籍代码
典型的情况是:ASP页面从后台存储中?回数据,然后以超文本标记语言(HTML)的形式形成结果 2还苁菘獾乃俣热绾危幽诖嬷腥 回数据要比从后台存储设备中快得多 4颖镜赜才潭寥 数据通常也非常快 K裕岣咝阅芸梢酝ü捍娣衿魃系氖堇词迪郑蘼凼墙莼捍嬖谀诖嬷校蛘弑镜赜才讨??
缓存是经典的 翱占浠皇奔?钡恼壑蟹绞?H绻捍娴们 当,就可以看到显著的性能提升 N巳没捍嬗行В匦氡Vせ捍媸菔蔷R赜玫模乙彩羌扑闫鹄捶彼龅?W奥戮墒莸幕捍媸嵌阅诖娴睦朔??
不经常改变的数据是缓存的较好对象,因为不需要随时考虑这些数据更新后的同步操作 W楹峡?⒉慰急砀?HTML代码 ⒗┱贡昙怯镅源?⒉说ヒ约罢镜闩渲帽淞浚òㄊ菰疵諨SNS,Internet协议地址IP以及Web路径)都是很好的缓存对象 W⒁猓阂捍媸荼泶锸蕉皇鞘荼旧?H绻桓鯝SP页面经常变化并且很费力去缓存(比如整个产品目录),就要考虑预产生HTML,而不是每次发生请求时再描述它 ?
技巧2:在Application或Session对象中缓存经常使用的数据
ASP中的Application和Session对象是在内存中缓存数据的便利容器 D憧梢越莞持蹈鳤pplication和Session对象,这些数据在HTTP调用期间将一直保持在内存中 ession中的数据是为每一个用户服务的,Application中的数据是所有用户共享的 ?
淘宝网 怎么开店无锡东风桥无线领夹话筒
何时需要在Application和Session中装入数据?通常,当应用程序启动或者会话开始时,数据就被装入了 N嗽谡馐弊叭胧荩贏pplication OnStart()或者Session OnStart()中分别添加适当的代码 U庑┖挥谖募礼lobal.asa中,如果原来不存在,就添加上 R部梢栽谑菔状涡枰氖焙虻魅耄贏SP页面中添加代码,检查数据是否存在,如果没有发现,就调入它 U饫镉幸桓隼樱砹吮怀莆?發azy evalution 钡木湫阅艽砑际酰褐钡叫枰保偃ゼ扑?@尤缦拢?
<%
Function GetEmploymentStatusList
Dim d
d = Application("EmploymentStatusList")
If d = "" Then
' FetchEmploymentStatusList function (not shown)
' fetches data from DB, returns an Array
免费订阅报纸北京二手办公家具仙剑秘籍 d = FetchEmploymentStatusList()
Application("EmploymentStatusList") = d
End If
GetEmploymentStatusList = d
End Function
%>
对于不同的数据,可以编写类似的函数代码 ?
数据应该按什么格式保存?任何变量类型都可以,因为所有的脚本变量都是不同的 1热缢担梢员4嫖址?⒄突蛘呤?Mǔ#獳DO记录集的内容存储到这些变量类型中一个 N舜覣DO记录集中?出数据,需要手工地拷贝数据到VBScript变量中,每次一个字段 J褂萌我庖桓鯝DO记录集的函数functions GetRows(),GetString() 或者 Save() (ADO 2.5)都非常得快速而且简单,这里有个函数,描述了如何使用GetRows()返回记录集数据的数组:
文秘专业知识试题恐龙危机2免cd补丁虚拟机怎么上网
' Get Recordset, return as an Array
Function FetchEmploymentStatusList
Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open "select StatusName, StatusID from EmployeeStatus", _
"dsn=employees;uid=sa;pwd=;"
FetchEmploymentStatusList = rs.GetRows() " Return data as an Array
rs.Close
Set rs = Nothing
深圳船厂丝路传说新手任务数据库 关联 End Function
上述代码的一个更深的技巧是为列表缓存了HTML O旅媸歉黾虻サ睦樱?
' Get Recordset, return as HTML Option list
Function FetchEmploymentStatusList
Dim rs, fldName, s
Set rs = CreateObject("ADODB.Recordset")
rs.Open "select StatusName, StatusID from EmployeeStatus", _
"dsn=employees;uid=sa;pwd=;"
欢天喜地七仙女尾曲公车上顶人浙江电子警察 s = "<select name=""EmploymentStatus">" & vbCrLf
Set fldName = rs.Fields("StatusName") ' ADO Field Binding
Do Until rs.EOF
' Next line violates Don't Do String Concats,
' but it's OK because we are building a cache
s = s & " <option>" & fldName & "</option>" & vbCrLf
rs.MoveNext
Loop
s = s & "</select>" & vbCrLf
rs.Close
索尼数码相机内存卡香港2005彩开奖结果外星生物揭秘图片 Set rs = Nothing ' See Release Early
FetchEmploymentStatusList = s ' Return data as a String
End Function
在合适的环境下,可以在Application或者Session中缓存ADO记录集本身,但是有2点提示:
ADO必须是自由线程标记的
需要使用disconnected recordset方式
如果不能保证上述2个条件,就不要缓存ADO记录集,因为这会产生很大的危险性 ?
一句爱情誓言铁岭新闻中文语音朗读软件 当在Application或Session中保存数据后,数据将一直保持,除非程序改变它 ession变量到期或者Web应用程序重新启动 H绻菪枰拢趺窗欤靠梢缘饔弥挥泄芾碓辈拍芊梦实腁SP页面来更新数据,或者,通过函数周期性的自动更新数据 O旅娴睦又校牖捍媸菀黄鸨4媪耸敝颖昙牵欢问奔浜螅退⑿率??
<%
' error handing not shown...
Const UPDATE_INTERVAL = 300 ' Refresh interval, in seconds
|