如何写出优秀的ASP应用
类别: ASP教程
怎样创建性能棒、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。
什么是ASP
Active Server Page,简称ASP,是:
连接网友界面(HTML)和商业逻辑(Business Logic);
提供一致的、容易使用的、有状态保持的、基于WEB的客户端;
为那些需要事务处理的WEB 应用提供应用程序环境。
--------------------------------------------------------------------------------
ASP不是:
实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。
--------------------------------------------------------------------------------
ASP的使用者应该有下面的教训:
开发应用程序,而不是开发一个一个的孤立ASP页面;
对输入和输出进行缓存;
在发布之前要测试;
选择性能较好的部件;
减少数据库的存取:缓存变换后的结果;
使用MSMQ来处理有时间延迟的工作;
--------------------------------------------------------------------------------
站点设计
你的站点想提供什么?
信息架构:80/20准则;
站点导航;
u 页面布局;
u 可用性;
使用ALT和Title属性;
不使用图片或者Image Map的导航;
适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况;
屏幕分辨率和屏幕颜色数
是否支持WebTV、PDA…?
设置IMG的width和height属性。
非浏览器的访问,如自动机器人(Spider);
使用帧(Frame)?
使用Cookies的个性化;
避免坏连接;
使用meta标签;
内容审核;
内容检索;
结果反馈:用户反馈和跟踪;
减少下载时间;
--------------------------------------------------------------------------------
三层、四层应用设计
可读性、可维护性
使用注释;
在VBScript脚本中使用<%OptioExplicit%>;
使用字符串变量存储SQL字符串:便于调试;
使用Server.MapPath和相对路径;
使用ADODB.INC或者<!―metadata typelib=somelib file=somedll-->来引用常量,不要直接使用常量数值。
指定ADO调用的缺省参数,避免出错;
使用库或者部件来封装代码。
正确的方法:
--------------------------------------------------------------------------------
使用Server.URLEncode
错误捕获和处理
国际化:
--------------------------------------------------------------------------------
使用<%CodePage%>
使用Session.CodePage
在IIS5.0中,Response.write支持UTF8
--------------------------------------------------------------------------------
其他:
使用#include 重用代码
使用分页技术
站点安全:
客户身份验证
输入验证
#include 文件不要使用.INC后缀,使用.ASP或者设置.INC的应用程序映射
把MDB文件存放在非WEB路径下;
使用ADSI做安全管理
--------------------------------------------------------------------------------
Session和Application状态
Session的使用:
使用起来很方便但是很有问题;
HTTP是一个无状态的协议;
设计购物推车特别有用;
不利于可伸缩性设计(Scalability);
在不需要Session的页面中使用<%EnableSessionState=false%>
尽可能完全避免使用Session;
在多个web服务器情况下不适合;
某些部件使Session运行在单一线程模式,减少了吞吐量;
消耗内存;
Session有超时的问题
需要客户端的浏览器打开cookie设置;
不要在session中保存recordset,或者缓存connection对象;
在global.asa不要使用空的Session_OnEnd;
可选方案:
cookies
直接状态编码:简单、容易、不安全
后端数据库的ID作为状态值
querystring 参数
如amazon的url方式
隐藏的表单
--------------------------------------------------------------------------------
Application变量:
共享变量
不能持久保存
多个web服务器时不行,除非只是只读变量。
缓存
对静态内容非常理想
不要使用Response.Expires=0,使用负数:
Response.Expires=-10000;
Response.AddHeader “Pragma”,”no-cache”
Response.AddHeader “cache-control”,”no-store”
服务器缓存
proxy缓存
客户端缓存
--------------------------------------------------------------------------------
部件
性能
伸缩性
□分离商务逻辑和页面表现
被ASP或其他环境重用
事务处理
类型安全
存取操作系统特性
保护知识产权
在下列情况下使用Server.CreateObject:
MTS事务处理
上下文安全性
ASP内部部件
OnStartPage、OnEndPage
使用<Object RunAt=server>延迟对象初始化
是否保存到Session或者Application变量中
--------------------------------------------------------------------------------
性能
Response缓冲:Response.Buffer=True
关闭Connection并:set Connection=Nothing
使用局部变量
用<Object >代替Server.CreateObject
不要使用Session和Application变量
不要将COM对象存储在Session或者Application变量中
关闭脚本调试
避免重复的字符串相加
在费时的页面顶端使用Response.IsClientConnected
使用MSMQ
不要在Session或者Application中存储大数组
不要ReDim 数组
将集合类型的对象赋给临时变量
减小微处理器的最大线程数(运行regedt32,在HKEY_LOCAL_MACHINESYSTEM CurrentControlSetServicesw3SVCASPParameters,增加ProcessorThreadMax,减小这个值,看看性能的变化;或者增大这个值。)
设置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU个数。缺省的是30;(在系统路径下:system32inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/AspScriptEngineCacheMax);
减少Session.Timeout;
在MMC中,设置ASP应用程序缓冲为有效。
--------------------------------------------------------------------------------
把某些工作交给客户端:
CSS、DHTML
XML
RDS
Remote Scripting
Xmlhttp
客户端验证
减小文件大小
尽可能避免https和SSL
使用Response.End测试性能
--------------------------------------------------------------------------------
数据库
减少数据库存取访问;
缓存变换后的结果;
使用ODBC连接池和OLEDB资源池;
使用系统DSN或者非DSN,不要使用DSN或者文件DSN;
使ADO运行在双线程模式(Both-threaded):makefre.bat;
使用ADO的Field对象;
GetString或者GetRows比较快;
RDS和XML把负载嫁到客户端;
不要使用Select *,把字段写出来;
尽量使用SQL Server 7,不要使用Access;
使用SQL Server的特性:存储过程、Job、Join、sort、group
使用SQL Analysis,优化SQL的性能
使用索引
本地使用Name-pipes,远程使用Sockets
准确地指定Command Type
-----------------------------------------------------------------------
IIS 5的新特性
可靠的重新启动
ASP性能提高
Server.Transfer比Server.Redirect更好
Server.Execute
Server.GetLastError
什么是ASP
Active Server Page,简称ASP,是:
连接网友界面(HTML)和商业逻辑(Business Logic);
提供一致的、容易使用的、有状态保持的、基于WEB的客户端;
为那些需要事务处理的WEB 应用提供应用程序环境。
--------------------------------------------------------------------------------
ASP不是:
实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。
--------------------------------------------------------------------------------
ASP的使用者应该有下面的教训:
开发应用程序,而不是开发一个一个的孤立ASP页面;
对输入和输出进行缓存;
在发布之前要测试;
选择性能较好的部件;
减少数据库的存取:缓存变换后的结果;
使用MSMQ来处理有时间延迟的工作;
--------------------------------------------------------------------------------
站点设计
你的站点想提供什么?
信息架构:80/20准则;
站点导航;
u 页面布局;
u 可用性;
使用ALT和Title属性;
不使用图片或者Image Map的导航;
适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况;
屏幕分辨率和屏幕颜色数
是否支持WebTV、PDA…?
设置IMG的width和height属性。
非浏览器的访问,如自动机器人(Spider);
使用帧(Frame)?
使用Cookies的个性化;
避免坏连接;
使用meta标签;
内容审核;
内容检索;
结果反馈:用户反馈和跟踪;
减少下载时间;
--------------------------------------------------------------------------------
三层、四层应用设计
可读性、可维护性
使用注释;
在VBScript脚本中使用<%OptioExplicit%>;
使用字符串变量存储SQL字符串:便于调试;
使用Server.MapPath和相对路径;
使用ADODB.INC或者<!―metadata typelib=somelib file=somedll-->来引用常量,不要直接使用常量数值。
指定ADO调用的缺省参数,避免出错;
使用库或者部件来封装代码。
正确的方法:
--------------------------------------------------------------------------------
使用Server.URLEncode
错误捕获和处理
国际化:
--------------------------------------------------------------------------------
使用<%CodePage%>
使用Session.CodePage
在IIS5.0中,Response.write支持UTF8
--------------------------------------------------------------------------------
其他:
使用#include 重用代码
使用分页技术
站点安全:
客户身份验证
输入验证
#include 文件不要使用.INC后缀,使用.ASP或者设置.INC的应用程序映射
把MDB文件存放在非WEB路径下;
使用ADSI做安全管理
--------------------------------------------------------------------------------
Session和Application状态
Session的使用:
使用起来很方便但是很有问题;
HTTP是一个无状态的协议;
设计购物推车特别有用;
不利于可伸缩性设计(Scalability);
在不需要Session的页面中使用<%EnableSessionState=false%>
尽可能完全避免使用Session;
在多个web服务器情况下不适合;
某些部件使Session运行在单一线程模式,减少了吞吐量;
消耗内存;
Session有超时的问题
需要客户端的浏览器打开cookie设置;
不要在session中保存recordset,或者缓存connection对象;
在global.asa不要使用空的Session_OnEnd;
可选方案:
cookies
直接状态编码:简单、容易、不安全
后端数据库的ID作为状态值
querystring 参数
如amazon的url方式
隐藏的表单
--------------------------------------------------------------------------------
Application变量:
共享变量
不能持久保存
多个web服务器时不行,除非只是只读变量。
缓存
对静态内容非常理想
不要使用Response.Expires=0,使用负数:
Response.Expires=-10000;
Response.AddHeader “Pragma”,”no-cache”
Response.AddHeader “cache-control”,”no-store”
服务器缓存
proxy缓存
客户端缓存
--------------------------------------------------------------------------------
部件
性能
伸缩性
□分离商务逻辑和页面表现
被ASP或其他环境重用
事务处理
类型安全
存取操作系统特性
保护知识产权
在下列情况下使用Server.CreateObject:
MTS事务处理
上下文安全性
ASP内部部件
OnStartPage、OnEndPage
使用<Object RunAt=server>延迟对象初始化
是否保存到Session或者Application变量中
--------------------------------------------------------------------------------
性能
Response缓冲:Response.Buffer=True
关闭Connection并:set Connection=Nothing
使用局部变量
用<Object >代替Server.CreateObject
不要使用Session和Application变量
不要将COM对象存储在Session或者Application变量中
关闭脚本调试
避免重复的字符串相加
在费时的页面顶端使用Response.IsClientConnected
使用MSMQ
不要在Session或者Application中存储大数组
不要ReDim 数组
将集合类型的对象赋给临时变量
减小微处理器的最大线程数(运行regedt32,在HKEY_LOCAL_MACHINESYSTEM CurrentControlSetServicesw3SVCASPParameters,增加ProcessorThreadMax,减小这个值,看看性能的变化;或者增大这个值。)
设置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU个数。缺省的是30;(在系统路径下:system32inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/AspScriptEngineCacheMax);
减少Session.Timeout;
在MMC中,设置ASP应用程序缓冲为有效。
--------------------------------------------------------------------------------
把某些工作交给客户端:
CSS、DHTML
XML
RDS
Remote Scripting
Xmlhttp
客户端验证
减小文件大小
尽可能避免https和SSL
使用Response.End测试性能
--------------------------------------------------------------------------------
数据库
减少数据库存取访问;
缓存变换后的结果;
使用ODBC连接池和OLEDB资源池;
使用系统DSN或者非DSN,不要使用DSN或者文件DSN;
使ADO运行在双线程模式(Both-threaded):makefre.bat;
使用ADO的Field对象;
GetString或者GetRows比较快;
RDS和XML把负载嫁到客户端;
不要使用Select *,把字段写出来;
尽量使用SQL Server 7,不要使用Access;
使用SQL Server的特性:存储过程、Job、Join、sort、group
使用SQL Analysis,优化SQL的性能
使用索引
本地使用Name-pipes,远程使用Sockets
准确地指定Command Type
-----------------------------------------------------------------------
IIS 5的新特性
可靠的重新启动
ASP性能提高
Server.Transfer比Server.Redirect更好
Server.Execute
Server.GetLastError
- 上一篇: 处理运行时间长的脚本以及内容大的主页
- 下一篇: 浅谈ASP编程的思路与纠错
-= 资 源 教 程 =-
文 章 搜 索