你好,欢迎访问远方教程PC版!
广告位招租
网站首页 >> ASP教程 >> ASP优化技巧 >> 文章内容

ASP优化篇:5.2 提高ASP性能的最佳选择(第3页)

[日期:2014-11-09]   来源:远方教程  作者:远方教程   阅读:7312次[字体: ] 访问[旧版]
 捐赠远方教程 

  使用Option Explicit 会使性能有实质改变吗?

  在一个ASP页面的顶部设置Option Explicit 以要求所有的变量在使用之前都要在页面上进行声明。这有两个原因。首先应用程序可以更快地处理变量的存取。其次,这样可以防止我们无意中错用变量的名字。在这个测试中我们移走Option Explicit 引用和变量的Dim 声明。

基准值 = 5.57 msec/page
反应时间= 6.12 msec/page
差 = +0.55 msec (9.8% 增加)、

  尽管有一些代码行从页面中去掉了,反应时间却依然增加了。所以尽管使用Option explicit 有时候费时间,但是在性能上却有很显著的效果。因此我们又可以增加一条规则:在VBScript中总是使用Option explicit。

是否应该把脚本逻辑放在子程序和函数区?

用函数和子程序来组织和管理代码是一个很好的方法,特别是当一个代码区在页面中多次使用的情况。缺点是要在系统上增加一个做相同工作的额外函数调用。子程序和函数的另一个问题是变量的范围。从理论上说,在一个函数区内指定变量更有效。现在我们看看这两个方面如何发生作用。

将Response.Write 语句移入子程序

这个测试只是将Response.Write 语句移入一个子程序区内。


CALL writeTable()
SUB writeTable()
Response.Write("<html>" & _
"<head>" & _

"<tr><td><b>EMail:</b></td><td>" & EMail & "</td></tr>" & _
"<tr><td><b>Birth Date:</b></td><td>" & BirthDate & "</td></tr>" & _
"</table>" & _
"</body>" & _
"</html>")
END SUB /app2/function1.asp片段

基准值= 5.57 msec/page
反应时间= 6.02 msec/page
差 = +0.45 msec (8.1% 增加)

同预料中一样,子程序调用给页面带来了额外的负担。

将所有脚本移入子程序中

在这个测试中,Response.write 语句与变量声明都移入一个子程序区中。

<% OPTION EXPLICIT
CALL writeTable()
SUB writeTable()
Dim FirstName

Dim BirthDate
FirstName = "John"

BirthDate = "1/1/1950"
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>")
END SUB /app2/function2.asp片段

基准值= 5.57 msec/page
反应时间= 5.22 msec/page
差 = -0.35 msec (6.3% 降低)

非常有趣!尽管将变量移到函数范围内增加了额外的函数调用,但实际上却提高了性能。我们又可以增加以下规则:

* 在一个页面上,如果代码要使用一次以上,就将代码封入函数区。
* 适当时候,将变量声明移到函数范围内。

使用包含文件有什么影响?

ASP编程的一个重要功能就是包含来自其它页面的代码。通过这项功能,程序员可以在多个页面上共享函数,使代码更易于维护。缺点在于服务器必须从多个来源组装页面。以下是使用Include文件的两个测试。

使用内联代码的Include 文件

在这个测试中,有一小段代码被移到一个Include 文件中:

<% OPTION EXPLICIT
Dim FirstName

Dim BirthDate
FirstName = "John"

BirthDate = "1/1/1950"
%> <!-- #include file="inc1.asp" -->

/app2/include_1.asp片段

基准值 = 5.57 msec/page
反应时间= 5.93 msec/page
差 = +0.36 msec (6.5% 增加)

这不奇怪。使用Include 文件形成了负载。

在函数区使用Include 文件

在这里,代码都包装在一个Include 文件中的子程序里。Include 引用是在页面顶部进行的,在ASP脚本的适当位置调用子程序。

<% OPTION EXPLICIT
Dim FirstName

Dim BirthDate
FirstName = "John"

BirthDate = "1/1/1950"
CALL writeTable()
%> <!-- #include file="inc2.asp" -->

/app2/include_2.asp片段

基准值 = 5.57 msec/page
反应时间= 6.08 msec/page
差 =+0.51 msec (9.2% 增加)

这对性能造成的影响比functions调用还大。因此:只有当代码在页面之间共享时才使用Include 文件。

执行错误处理时会形成多大的负载?

对于所有真正的应用程序来说,错误处理都是必要的。这个测试中,通过调用On Error Resume Next函数来调用错误句柄。

<% OPTION EXPLICIT
On Error Resume Next
Dim FirstName
… /app2/error_1.asp片段

基准值 = 5.57 msec/page
反应时间= 5.67 msec/page
差= 0.10 msec (1.8% 增加)

你可以看到,错误句柄带来了代价。我们可以提出以下建议:只有在会发生超出测试或控制能力之外的情况时才使用错误句柄。一个最基本的例子就是使用存取其它资源,如ADO或FileSystem 对象的COM对象。

图片展示
 
相关评论
站长推荐