ASP网页设计改善ASP法式中的字符串处置功能
asp可以使用微软的activeX 使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般法式|功能|字符串 简介编写 ASP 页面时,开辟人员实践上是创立一个格局化的文本流,经由过程 ASP 供应的 Response 对象写入 Web 客户端。创立此文本流的办法有多种,而您选择的办法将对 Web 使用法式的功能和可缩放性发生很大影响。良多次,在我匡助客户优化其 Web 使用法式的功能时,发明个中一个对照无效的办法是更改 HTML 流的创立体例。本文将引见几种经常使用手艺,并测试它们对一个复杂的 ASP 页面的功能所发生的影响。
ASP 设计
很多 ASP 开辟人员都遵守优秀的软件工程准绳,尽量地将其代码模块化。这类设计凡是利用一些包括文件,这些文件中包括对页面的特定不一连局部停止格局化生成的函数。这些函数的字符串输入(凡是是 HTML 表格代码)可以经由过程各类组合创立一个完全的页面。某些开辟人员对此办法停止了改善,将这些 HTML 函数移到 Visual Basic COM 组件中,但愿充实使用已编译的代码供应的额定功能。
虽然这类设计办法很不错,但创立构成这些不一连 HTML 代码组件的字符串所利用的办法将对 Web 站点的功能和可缩放性发生很大的影响,不管实践的操作是在 ASP 包括文件中履行仍是在 Visual Basic COM 组件中履行。
字符串联接
请看以下 WriteHTML 函数的代码片段。名为 Data 的参数只是一个字符串数组,个中包括一些要格局化为表格布局的数据(例如,从数据库前往的数据)。
Function WriteHTML( Data )
Dim nRep
For nRep = 0 to 99
sHTML = sHTML & vbcrlf _
& "<TR><TD>" & (nRep + 1) & "</TD><TD>" _
& Data( 0, nRep ) & "</TD><TD>" _
& Data( 1, nRep ) & "</TD><TD>" _
& Data( 2, nRep ) & "</TD><TD>" _
& Data( 3, nRep ) & "</TD><TD>" _
& Data( 4, nRep ) & "</TD><TD>" _
& Data( 5, nRep ) & "</TD></TR>"
Next
WriteHTML = sHTML
End Function
这是良多 ASP 和 Visual Basic 开辟人员创立 HTML 代码经常用的办法。sHTML 变量中包括的文本前往到挪用代码,然后利用 Response.Write 写入客户端。固然,这还可以暗示为直接嵌入不包括 WriteHTML 函数的页面的相似代码。此代码的成绩是,ASP 和 Visual Basic 利用的字符串数据类型(BSTR 或 Basic 字符串)实践上没法更改长度。这意味着每当字符串长度更改时,内存中字符串的原始暗示模式都将遭到损坏,并且将创立一个包括新字符串数据的新的暗示模式:这将增添分派内存息争除分派内存的操作。固然,ASP 和 Visual Basic 已为您处理了这一成绩,因而实践开支不会当即展现出来。分派内存息争除分派内存请求根基运转时期码消除各个公用锁定,因而需求大批开支。当字符串变得很大而且有大块内存要被疾速一连地分派息争除分派时,此成绩变得尤其分明,就像在大型字符串联接时代呈现的情形一样。虽然这一成绩对单用户情况的影响不大,但在办事器情况(例如,在 Web 办事器上运转的 ASP 使用法式)中,它将招致严重的功能和可缩放性成绩。
上面,咱们回到上述代码片断:此代码中要履行几何个字符串分派操作?谜底是 16 个。在这类情形下,“&”运算符的每次使用都将招致变量 sHTML 所指的字符串被损坏和从头创立。后面已提到,字符串分派的开支很大,而且跟着字符串的增大而增添,因而,咱们可以对上述代码停止改善。
快捷的处理计划
有两种办法可以减缓字符串联接的影响,第一种办法是测验考试减小要处置的字符串的巨细,第二种办法是测验考试削减履行字符串分派操作的数量。请拜见上面所示的 WriteHTML 代码的修订版本。
Function WriteHTML( Data )
Dim nRep
For nRep = 0 to 99
sHTML = sHTML & ( vbcrlf _
& "<TR><TD>" & (nRep + 1) & "</TD><TD>" _
& Data( 0, nRep ) & "</TD><TD>" _
& Data( 1, nRep ) & "</TD><TD>" _
& Data( 2, nRep ) & "</TD><TD>" _
& Data( 3, nRep ) & "</TD><TD>" _
& Data( 4, nRep ) & "</TD><TD>" _
& Data( 5, nRep ) & "</TD></TR>" )
Next
WriteHTML = sHTML
End Function
乍一看,能够很难发明这段代码与上一个代码示例的不同。其实,此代码只是在 sHTML = sHTML & 后的内容里面加上了括号。这实践上是经由过程更改优先按次,来减小大多半字符串联接操作中处置的字符串巨细。在最后的代码示例中,ASP 编译器将检查等号右侧的表达式,并从左到右停止盘算。了局,每次反复都要停止 16 个毗连操作,这些操作针对不休增加的 sHTML 停止。在新版本中,咱们提醒编译器更改操作按次。如今,它将按从左到右、从括号内到括号外的按次盘算表达式。此手艺使得每次反复包含 15 个毗连操作,这些操作针对的是不会增加的较小字符串,只要一个是针对不休增加的大的 sHTML。图 1 显示了这类优化办法与尺度毗连办法在内存利用形式方面的对照。
图 1:尺度毗连与加括号毗连在内存利用形式方面的对照
在特定情形下,利用括号可以对功能和可缩放性发生非常明显的影响,后文将对此停止进一步的申明。
StringBuilder
咱们已找到懂得决字符串联接成绩的快捷办法,在多半情形下,此办法可以到达功能和投入的最好均衡。然而,假如要进一步进步构建大型字符串的功能,需求采取第二种办法,即削减字符串分派操作的数量。为此,需求利用 StringBuilder。StringBuilder 是一个类,用于保护可设置装备摆设的字符串缓冲区,办理拔出到此缓冲区的新文本片段,并仅在文本长度超越字符串缓冲区长度时对字符串停止从头分派。Microsoft .NET 框架收费供应了如许一个类 (System.Text.StringBuilder),并建议在该情况下停止的一切字符串联接操作中利用它。在 ASP 和传统的 Visual Basic 情况中,咱们没法会见此类,因而需求自行创立。上面是利用 Visual Basic 6.0 创立的 StringBuilder 类示例(为简约起见,省略了毛病处置代码)。
Option Explicit
' 默许的缓冲区初始巨细和增加系数
Private Const DEF_INITIALSIZE As Long = 1000
Private Const DEF_GROWTH As Long = 1000
' 缓冲区巨细和增加
Private m_nInitialSize As Long
Private m_nGrowth As Long
' 缓冲区弛缓冲区计数器
Private m_sText As String
Private m_nSize As Long
Private m_nPos As Long
Private Sub Class_Initialize()
' 设置巨细和增加的默许值
m_nInitialSize = DEF_INITIALSIZE
m_nGrowth = DEF_GROWTH
' 初始化缓冲区
InitBuffer
End Sub
' 设置初始巨细和增加数目
Public Sub Init(ByVal InitialSize As Long, ByVal Growth As Long)
If InitialSize > 0 Then m_nInitialSize = InitialSize
If Growth > 0 Then m_nGrowth = Growth
End Sub
' 初始化缓冲区
Private Sub InitBuffer()
m_nSize = -1
m_nPos = 1
End Sub
' 增大缓冲区
Private Sub Grow(Optional MinimimGrowth As Long)
' 初始化缓冲区(若有需要)
If m_nSize = -1 Then
m_nSize = m_nInitialSize
m_sText = Space$(m_nInitialSize)
Else
' 只是增加
Dim nGrowth As Long
nGrowth = IIf(m_nGrowth > MinimimGrowth,
m_nGrowth, MinimimGrowth)
m_nSize = m_nSize + nGrowth
m_sText = m_sText & Space$(nGrowth)
End If
End Sub
' 将缓冲区巨细调剂到以后利用的巨细
由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况; 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 我想问如何掌握学习节奏(先学什么再学什么)最好详细点? 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
页:
[1]