zoukankan      html  css  js  c++  java
  • 如何写出优秀的ASP应用

    怎样创建鲁棒性、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。

    什么是ASP

    Active Server Page,简称ASP,是:

    l连接网友界面(HTML)和商业逻辑(Business Logic);

    l提供一致的、容易使用的、有状态保持的、基于WEB的客户端;

    l为那些需要事务处理的WEB 应用提供应用程序环境。

    ASP不是:

    l         实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。

    ASP的使用者应该有下面的教训:

    l         开发应用程序,而不是开发一个一个的孤立ASP页面;

    l         对输入和输出进行缓存;

    l         在发布之前要测试;

    l         选择性能较好的部件;

    l         减少数据库的存取:缓存变换后的结果;

    l         使用MSMQ来处理有时间延迟的工作;

    站点设计
    u       你的站点想提供什么?

    u       信息架构:80/20准则;

    u       站点导航;

    u       页面布局;

    u       可用性;

    n         使用ALT和Title属性;

    n         不使用图片或者Image Map的导航;

    u       适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况;

    u       屏幕分辨率和屏幕颜色数

    n         是否支持WebTV、PDA…?

    n         设置IMG的width和height属性。

    u       非浏览器的访问,如自动机器人(Spider);

    u       使用帧(Frame)?

    u       使用Cookies的个性化;

    u       避免坏连接;

    u       使用meta标签;

    u       内容审核;

    u       内容检索;

    u       结果反馈:用户反馈和跟踪;

    u       减少下载时间;

    三层、四层应用设计

    可读性、可维护性
    u       使用注释;

    u       在VBScript脚本中使用<%Option Explicit%>;

    u       使用字符串变量存储SQL字符串:便于调试;

    u       使用Server.MapPath和相对路径;

    u       使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->来引用常量,不要直接使用常量数值。

    u       指定ADO调用的缺省参数,避免出错;

    u       使用库或者部件来封装代码。

    正确的方法:

    u       使用Server.URLEncode

    u       错误捕获和处理

    国际化:

    u       使用<%CodePage%>

    u       使用Session.CodePage

    u       在IIS5.0中,Response.write支持UTF8

    其他:

    u       使用#include 重用代码

    u       使用分页技术

    站点安全:

    u       客户身份验证

    u       输入验证

    u       #include 文件不要使用.INC后缀,使用.ASP或者设置.INC的应用程序映射

    u       把MDB文件存放在非WEB路径下;

    u       使用ADSI做安全管理

    Session和Application状态
    Session的使用:

    u       使用起来很方便但是很有问题;

    u       HTTP是一个无状态的协议;

    u       设计购物推车特别有用;

    u       不利于可伸缩性设计(Scalability);

    u       在不需要Session的页面中使用<%EnableSessionState=false%>

    u       尽可能完全避免使用Session;

    u       在多个web服务器情况下不适合;

    u       某些部件使Session运行在单一线程模式,减少了吞吐量;

    u       消耗内存;

    u       Session有超时的问题

    u       需要客户端的浏览器打开cookie设置;

    u       不要在session中保存recordset,或者缓存connection对象;

    u       在global.asa不要使用空的Session_OnEnd;

    u       可选方案:

    n         cookies

    u       直接状态编码:简单、容易、不安全

    u       后端数据库的ID作为状态值

    n         querystring 参数

    n         如amazon的url方式

    n         隐藏的表单

    Application变量:

    u       共享变量

    u       不能持久保存

    u       多个web服务器时不行,除非只是只读变量。

    缓存
    u       对静态内容非常理想

    u       不要使用Response.Expires=0,使用负数:

    n         Response.Expires=-10000;

    n         Response.AddHeader “Pragma”,”no-cache”

    uResponse.AddHeader “cache-control”,”no-store”

    u       服务器缓存

    u       proxy缓存

    u       客户端缓存

    部件
    u       性能

    u       伸缩性

    u       分离商务逻辑和页面表现

    u       被ASP或其他环境重用

    u       事务处理

    u       类型安全

    u       存取操作系统特性

    u       保护知识产权

    u       在下列情况下使用Server.CreateObject:

    n         MTS事务处理

    n         上下文安全性

    n         ASP内部部件

    n         OnStartPage、OnEndPage

    u       使用<Object RunAt=server>延迟对象初始化

    u       是否保存到Session或者Application变量中

    u       

    性能
    n         Response缓冲:Response.Buffer=True

    n         关闭Connection并:set Connection=Nothing

    n         使用局部变量

    n         用<Object >代替Server.CreateObject

    n         不要使用Session和Application变量

    n         不要将COM对象存储在Session或者Application变量中

    n         关闭脚本调试

    n        避免重复的字符串相加

    n         在费时的页面顶端使用Response.IsClientConnected

    n         使用MSMQ

    n         不要在Session或者Application中存储大数组

    n         不要ReDim 数组

    n         将集合类型的对象赋给临时变量

    n         减小微处理器的最大线程数(运行regedt32,在HKEY_LOCAL_MACHINESYSTEM       CurrentControlSetServicesw3SVCASPParameters,增加ProcessorThreadMax,减小这个值,看看性能的变化;或者增大这个值。)

    n         设置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU个数。缺省的是30;(在系统路径下:system32inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/AspScriptEngineCacheMax);

    n         减少Session.Timeout;

    n         在MMC中,设置ASP应用程序缓冲为有效。

    把某些工作交给客户端:

    n         CSS、DHTML

    n         XML

    n         RDS

    n         Remote Scripting

    n         Xmlhttp

    n         客户端验证

    n         减小文件大小

    n         尽可能避免https和SSL

    n         使用Response.End测试性能

    n         

    数据库
    n         减少数据库存取访问;

    n         缓存变换后的结果;

    n         使用ODBC连接池和OLEDB资源池;

    n         使用系统DSN或者非DSN,不要使用DSN或者文件DSN;

    n         使ADO运行在双线程模式(Both-threaded):makefre.bat;

    n         使用ADO的Field对象;

    n         GetString或者GetRows比较快;

    n         RDS和XML把负载嫁到客户端;

    n         不要使用Select *,把字段写出来;

    n         尽量使用SQL Server 7,不要使用Access;

    n         使用SQL Server的特性:存储过程、Job、Join、sort、group

    n         使用SQL Analysis,优化SQL的性能

    n         使用索引

    n         本地使用Name-pipes,远程使用Sockets

    n         准确地指定Command Type

    IIS 5的新特性
    n         可靠的重新启动

    n         ASP性能提高

    n         Server.Transfer比Server.Redirect更好

    n         Server.Execute

    n         Server.GetLastError

  • 相关阅读:
    行转列
    multipath 安装配置
    网卡绑定
    numa对MySQL多实例性能影响
    Fatal NI connect error 12170
    REVOKE DBA权限要小心
    Oracle 数据库整理表碎片
    listagg 函数
    10046 事件补充
    tkprof 解释
  • 原文地址:https://www.cnblogs.com/itecho/p/1307182.html
Copyright © 2011-2022 走看看