在服务器上生成动态内容是使用ASP最主要的原因之一,所以我们选择的第一个测试项目是确定把动态内容发送到应答流使用什么方法最好。基本的选择有两种(以及它们的一些变化):使用内嵌ASP标记,使用Response.Write语句。 为测试这些不同的方法,我们创建了一个简单的ASP页面,页面先定义一些变量然后把它们插入到表格。虽然这个页面很简单,而且没有实际用途,但它足以让我们分离和测试各个问题。 2.1 使用ASP内嵌标记 第一个测试是使用ASP的内嵌标记< %= x % >,其中x是一个变量。这是使用最方便的方法,而且它可以让页面的HTML部分变得更容易阅读和维护。 < % OPTION EXPLICIT Dim FirstName Dim LastName Dim MiddleInitial Dim Address Dim City Dim State Dim PhoneNumber Dim FaxNumber Dim EMail Dim BirthDate FirstName = "John" MiddleInitial = "Q" LastName = "Public" Address = "100 Main Street" City = "New York" State = "NY" PhoneNumber = "1-212-555-1234" FaxNumber = "1-212-555-1234" EMail = "john@public.com" BirthDate = "1/1/1950" % > < HTML > < HEAD > < TITLE >Response Test< / TITLE > < /HEAD > < BODY > < H1 >Response Test< /H1 > < TABLE > < tr >< td >< b >First Name:< /b >< /td >< td >< %= FirstName % >< /td >< /tr > < tr >< td >< b >Middle Initial:< /b >< /td >< td >< %= MiddleInitial % >< /td >< /tr > < tr >< td >< b >Last Name:< /b >< /td >< td >< %= LastName % >< /td >< /tr > < tr >< td >< b >Address:< /b >< /td >< td >< %= Address % >< /td >< /tr > < tr >< td >< b >City:< /b >< /td >< td >< %= City % >< /td >< /tr > < tr >< td >< b >State:< /b >< /td >< td >< %= State % >< /td >< /tr > < tr >< td >< b >Phone Number:< /b >< /td >< td >< %= PhoneNumber % >< /td >< /tr > < tr >< td >< b >Fax Number:< /b >< /td >< td >< %= FaxNumber % >< /td >< /tr > < tr >< td >< b >EMail:< /b >< /td >< td >< %= EMail % >< /td >< /tr > < tr >< td >< b >Birth Date:< /b >< /td >< td >< %= BirthDate % >< /td >< /tr > < /TABLE > < /BODY > < /HTML > /app1/response1.asp的完整代码 最好记录 = 8.28 毫秒/页 2.2 使用Response.Write输出每一行HTML代码 许多优秀的文献指出,应当避免使用前面的内嵌标记方法,因为它导致一个称为“上下文切换”的操作。这个操作发生在Web服务器所处理的代码类型发生变化的时候(从纯HTML的发送到脚本处理,或反过来),这种切换需要一定的时间。许多程序员在了解了这一点之后,他们的第一个反应是将每一行HTML代码都用Response.Write函数来输出: ... Response.Write("< html >") Response.Write("< head >") Response.Write(" < title >Response Test< /title >") Response.Write("< /head >") Response.Write("< body >") Response.Write("< h1 >Response Test< /h1 >") Response.Write("< table >") Response.Write("< tr >< td >< b >First Name:< /b >< /td >< td >" & FirstName & "< /td >< /tr >") Response.Write("< tr >< td >< b >Middle Initial:< /b >< /td >< td >" & MiddleInitial & "< /td >< /tr >") ... /app1/response2.asp片断 最好记录 = 8.28 毫秒/页 响应时间 = 8.08 毫秒/页 差 额 = -0.20 毫秒 (减少 2.4%) 和内嵌标记版本相比,我们所看到的性能改善非常小,简直令人惊讶。这或许是因为页面中多出了许多函数调用。不过这种方法还有一个更大的缺点,由于HTML代码嵌入到了函数内,脚本代码变得非常冗长,阅读和维护都不方便。 2.3 使用封装函数 Response.Write并不会在文本行的末尾加上CRLF(Carriage Return - Line Feed,回车换行),这是使用上面这种方法最令人失望的地方。尽管已经在服务器端把HTML代码作了很好的格式化,但在浏览器中看到的仍旧只有长长的一行代码。不过失望的不仅是这一个问题,人们很快就发现不存在能够自动添加CRLF的Response.WriteLn函数。一个很自然的反应就是创建Response.Write的封装函数,在每行的后面加上CRLF: ... writeCR("< tr >< td >< b >First Name:< /b >< /td >< td >" & FirstName & "< /td >< /tr >") ... SUB writeCR(str) Response.Write(str & vbCRLF) END SUB /app1/response4.asp片断 最好记录 = 8.08 毫秒/页 响应时间 = 10.11 毫秒/页 差 额 = +2.03 毫秒 (增加 25.1%) 结果是性能的大大下降。当然,这主要是因为这种方法使得函数的调用次数加倍,它对性能的影响非常明显。应当不惜代价地避免这种用法,CRLF导致每行的末尾多了两个字节,而这两个字节对于浏览器显示页面是没有用的。在大多数情况下,浏览器端HTML代码的格式美观只是方便了你的竞争者阅读和理解页面的设计。 2.4 合并多个Response.Write 如果不考虑最后一次有关封装函数的测试,下一个合理的步骤应当是将所有字符串从分开的Response.Write语句合并到一个语句,从而减少函数调用次数、提高代码运行效率。 ... Response.Write("< html >" & _ "< head >" & _ "< title >Response Test< /title >" & _ "< /head >" & _ "< body >" & _ "< h1 >Response Test< /h1 >" & _ "< table >" & _ "< tr >< td >< b >First Name:< /b >< /td >< td >" & FirstName & "< /td >< /tr >" & _ ... "< tr >< td >< b >Birth Date:< /b >< /td >< td >" & BirthDate & "< /td >< /tr >" & _ "< /table >" & _ "< /body >" & _ "< /html >") /app1/response3.asp片断 最好记录 = 8.08 毫秒/页 响应时间 = 7.05 毫秒/页 差 额 = -1.03 毫秒 (减少 12.7%) 这是目前为止最好的方法。 2.5 合并多个Response.Write,且在每一行的末尾增加CRLF 也有人非常关注他们的HTML代码在浏览器端是否美观,因此我们又在每一行HTML代码的末尾加上了一个回车,使用的是vbCRLF常量,其他的测试代码与上例一样。 ... Response.Write("< html >" & vbCRLF & _ "< head >" & vbCRLF & _ " < title >Response Test< /title >" & vbCRLF & _ "< /head >" & vbCRLF & _ ... /app1/response5.asp片断 最好记录 = 7.05 毫秒/页 响应时间 = 7.63 毫秒/页 差 额 = +0.58 毫秒 (增加 8.5%) 结果是性能略有下降,这可能是因为增加了字符串连接操作,同时输出的文本也增加了。 2.6 意见 根据上述ASP输出测试的结果,我们得出如下编码规则: 避免过多地使用内嵌ASP。 把尽可能多的Response.Write语句合并成单个语句。 绝对不要为了加上CRLF而封装Response.Write。 如果要格式化HTML输出,直接在Response.Write语句后面加上CRLF。 |
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>