仓酷云

标题: ASP网页编程之改善ASP使用法式中的字符串处置功能 [打印本页]

作者: 精灵巫婆    时间: 2015-2-3 23:28
标题: ASP网页编程之改善ASP使用法式中的字符串处置功能
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。法式|功能|字符串   摘要:大多半 Active Server Pages (ASP) 使用法式都要经由过程字符串联接来创立出现给用户的 HTML 格局的数据。本文对几种创立此 HTML 数据流的办法停止了对照,在特定情形下,某些办法在功能方面要优于其他办法。本文假定您已具有必定的 ASP 和 Visual Basic 编程方面的常识。
  简介

  编写 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_sTex</p>  帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。
作者: 莫相离    时间: 2015-2-3 23:32
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
作者: 愤怒的大鸟    时间: 2015-2-6 19:15
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 若天明    时间: 2015-2-15 01:23
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
作者: 乐观    时间: 2015-2-23 15:23
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
作者: 柔情似水    时间: 2015-2-24 02:57
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
作者: 海妖    时间: 2015-3-3 11:07
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
作者: 因胸联盟    时间: 2015-3-6 15:58
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 仓酷云    时间: 2015-3-11 05:31
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
作者: 再见西城    时间: 2015-3-13 23:08
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者: 分手快乐    时间: 2015-3-18 09:05
下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
作者: 精灵巫婆    时间: 2015-3-27 15:11
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
作者: 冷月葬花魂    时间: 2015-4-13 12:35
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 变相怪杰    时间: 2015-4-19 02:14
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者: 第二个灵魂    时间: 2015-4-21 13:23
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 飘飘悠悠    时间: 2015-4-21 23:15
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者: 透明    时间: 2015-4-25 10:45
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
作者: 活着的死人    时间: 2015-5-9 13:56
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 兰色精灵    时间: 2015-5-10 01:50
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
作者: 灵魂腐蚀    时间: 2015-6-16 13:14
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2