从8个方面优化ASP代码(2)

来源:CSDN 时间:2007-09-16 18:01:00 


5、  使用case进行条件选择
在进行条件选择的时候,尽量使用case语句,避免使用if语句。使用case语句,可以使程序流程化,执行起来也比if语句来的快。示例如下:

<%  
   FOR i = 1 TO 1000 
   n = i 
   Response.Write AddSuffix(n) & "<br>" 
   NEXT 
   %> 
   <% 
   Function AddSuffix(num) 
numpart = RIGHT(num,1) 
SELECT CASE numpart 
CASE "1" 
IF InStr(num,"11") THEN 
num = num & "th" 
ELSE 
num = num & "st" 
END IF 
CASE "2" 
IF InStr(num,"12") THEN 
num = num & "th" 
ELSE 
num = num & "nd" 
END IF 
CASE "3" 
IF InStr(num,"13") THEN 
num = num & "th" 
ELSE 
num = num & "rd" 
END IF 
CASE "4" 
num = num & "th" 
CASE ELSE 
num = num & "th" 
END SELECT 
AddSuffix = num 
   END FUNCTION 
%> 



6、  使用adovbs.inc文件中定义的常量打开记录集
打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中定义了一些常量来定义这些类型。adovbs.inc文件保存在\inetpub\iissamples\IISamples目录下面。下面列举几个常用的游标类型和锁定类型。
游标类型:adOpenFowardOnly游标只能向前;adOpenKeyset游标可向前或者向后,如一用户添加记录,新记录不会出现在记录集中;adOpenDynamic游标动态随意;adOpenStatic记录集不对其他用户造成的记录修改有所反映。
锁定类型:adLockReadOney不能修改记录集中的记录;adLockPessimistic在编辑一条记录时锁定它;adLockOptimstic调用记录集Update方法时才锁定记录;adLockBatchOpeimstic记录

只能成批更新。 
<!--#INCLUDE VIRTUAL="/ADOVBS.INC" --> 
<%  
connectme="DSN=xur;uid=xur;pwd=xur" 
sqltemp="select * from publishers where name=’xur’" 
set rstemp=Server.CreateObject("adodb.Recordset") 
rstemp.open sqltemp, connectme, adOpenStatic,adLockOptimstic 
response.write rstemp.recordcount & " records in<br>" & sqltemp 
rstemp.close 
set rstemp=nothing 
%> 


7、  避免在使用global.asa文件中进行对象定义
由于global.asa文件中的内容可以为站点内所有文件引用,无疑,在global.asa文件中进行对象定义可以省去很多重复工作。比如在global.asa中的application_onstart函数中进行如下定义:

<%SUB application_onstart 
set application("theCONN")=server.createobject("adodb.connection") 
END SUB %>; 


这样就可以在站点任何代码中做类似引用:

<% 
mySQL="select * from publishers where state=’xur’ 
set rstemp=application("theconn").execute(mySQL) 
%> 

同样地,可以在session_onstart函数中创建记录集对象

<%SUB session_onstart 
set session("rstemp")=server.createobject("adodb.recordset") 
END SUB %> 


然后在站点也面中进行如下引用:

<% 
mySQL="select * from publishers where state=’xur’ 
set session("rstemp")=conntemp.execute(mySQL) 
%> 


但这样做的同时也有很大的负面影响,由于Application和session变量都只有在关闭网站的时候才释放占用的资源,所以session参数会浪费大量不必要内存,而且此时application变量成为服务器性能的瓶颈。
解决方法:建立定义对象asp页面,在需要进行调用这些对象的页面上,引入这张asp页面。假设定义对象的asp页面名称为define.asp,则只要在对应asp页面中加入以下语句就能引入该页面。

<!--#INCLUDE VIRTUAL="/define.asp" --> 

在进行页面引进时,最好在待引进的asp文件中不要包含

<%@LANGUAGE="VBSCRIPT"%>

语句。因为在asp文件中,只能有一句由@来定义的脚本解析语言。
8、  安全防护
asp提供了很好的代码保护机制,所有的asp代码都在服务器端执行而只返回给客户端代码执行结果。即便这样,在老版本的IIS中还可以在文件名后面家::$DATA来查看asp的源代码,这已经属于WebServer安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。
   虽然在asp中建议引入文件以inc作为扩展名,在这里仍建议以asp作为引文件的扩展名。当这些代码在安全机制不好的WebServer上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在WebServer上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。 
   不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(DateSource Name),而在进行数据库访问时直接访问该DSN。


标签:优化,asp
0
投稿

猜你喜欢

  • 这十大Python库你真应该知道

    2022-09-20 00:09:03
  • 用SQL批量插入数据的代码

    2024-01-15 04:49:30
  • MySQL导入与导出备份详解

    2024-01-16 18:47:08
  • 解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题

    2024-04-16 09:26:21
  • 纯js实现遮罩层效果原理分析

    2024-02-24 01:32:14
  • oracle dba 应该熟悉的命令

    2009-07-02 12:08:00
  • 使用Keras预训练模型ResNet50进行图像分类方式

    2022-04-02 22:57:21
  • css样式命名规则

    2008-04-30 12:31:00
  • 神经网络训练采用gpu设置的方式

    2021-04-24 16:43:25
  • Python-ElasticSearch搜索查询的讲解

    2023-12-30 01:09:27
  • JavaScript实现iframe自动高度调整和不同主域名跨域

    2024-04-16 09:47:33
  • Javascript的时间戳和php的时间戳转换注意事项

    2023-11-19 16:12:30
  • Vue动态组件component标签的用法大全

    2024-05-29 22:28:33
  • 在Django admin中编辑ManyToManyField的实现方法

    2021-03-05 18:03:47
  • javascript限制复选框的最大可选数

    2008-10-13 13:03:00
  • thinkPHP引入类的方法详解

    2024-06-05 09:45:55
  • vue实际运用之vuex持久化详解

    2024-05-09 15:15:50
  • Python input()函数案例教程

    2021-12-21 15:45:02
  • django+celery+RabbitMQ自定义多个消息队列的实现

    2021-01-21 16:52:10
  • Python3中urlopen()的用法解读

    2023-11-22 20:26:19
  • asp之家 网络编程 m.aspxhome.com