15种ASP技巧

*技巧1:给应用层文件使用GLOBAL.ASA
    将文件加载GLOBAL.ASA中的一个应用层数组中,而不是通过使用ASP文件系统对像在页面上读取文件。
    GLOBAL.ASA可用于指定事件脚本,也可用于声明拥有session或应用程序范围的对象。它不直接显示给用户,而是存储应用层事件的信息和对象。然后通过页面就可以指向存有数据的应用层数组。这就意味着每有一个服务器端请求就读一次文件,不是每个用户每页读一次。你可以运行一个独立的ASP文件去刷新应用层数组的内容,同时你也可以考虑使用dictionary对像(见技巧9)。
    这个技巧可以大大加快你的系统速度。
    那么将如何实现该技巧呢?
    如果你是一个脚本编写人员,必须使用文件系统对像读取文件放入一个数组或一个dictionary对像中。然后在GLOBAL.ASA中读取文件并且把数组(放有你读取的文件内容)或dictionary对像放到应用层声明中。这样就可让用户在数组或dictionary对像中存取信息,而不必每次通过一个ASP请求去提交信息。
    但也许你会想"如果缓存中的内容需要更新又该怎么办呢?我敢打赌不会用到。"其实不然。如果缓存中的内容需要更新,你可以调用一个包含有可执行应用程序锁定命令脚本的仅管理员可存取的ASP文件,在数组或dictionary对像中更新缓存信息,最后执行应用程序锁定命令。
    *技巧2:从产品源代码中移去HTML注释(IIS3.0适用)
    不错,难写的肯定也难懂。开个玩笑,这不代表要你把所有的HTML注释去掉(脚本注释就挺好的),大范围的HTML文本都能成批的拷贝到客户端。这样的话,你的脚本在IIS3.0上会运行得更快(在IIS4.0中,HTML注释不再会导致执行速度的降低)。
    *技巧3:多个Response.write声明
    如果你是在代码中的好几个地方用格式书写输出结果,那么考虑一下把这些结果合到一块,用一个Response.write语句写出来。然后你再看看你的HTML代码和vbscript脚本的组成。不要把HTML和vbscript脚本散布得太开,尽量写成成块的HTML和vbscript脚本。
    *技巧4:使用<OBJECT>标志例示对像
    如果你需要指向那些也许用不着的对象,那么就用<OBJECT>标志例示,而不是用Server.createobject.用Server.createobject将立刻生成该对象,如果你以后都用不着它的话,就等于浪费资源。
    *技巧5:尽可能的使用本地(局部)变量
    (以下的新技巧将取代较早前发布的"在一行内定义变量",其中包含有一些错误观点):
    局部变量是在子程序和函数中定义的(也就是常说局部范围的变量),这些变量被编译成数字指向并放入一张表中。这些局部变量的指向可以通过一次编译完成。而全局变量则是在运行时被执行的。这就意味着局部变量的存取要比全局变量快好几倍。而且,多维全局变量是其中最慢的,当第一次使用一个多维全局变量时,在新的对象产生之前,就要在整个对象模型中搜索一遍同名的对象。
    以下是一个非常常见的例子:
    Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
    If Foo.bar.blah.zaq = Foo.bar.blah.abc then
    运行时产生如下结果:
    1)变量Foo被定义为一个全局变量2)变量bar被定义为Foo的一个成员3)变量blah被定义为Foo.bar的一个成员4)变量qaz被定义为Foo.bar.blah的一个成员5)调用Foo.bar.blah.quaz(1)6)重复1至3。系统并不知道如果调用qaz改变了对象模型1-3步必须重新执行7)定义baz为Foo.bar.blah的成员,输出值8)重复1-3,执行zaq9)重复1-3,执行abc
    正如你看到的,效率极其低下,最快的方法就是把这些代码写在vbscript中:
    Set myobj = Foo.bar.blah ' do the resolution of blah ONCEMyobj.baz = myobj.qaz(1)If Myobj.zaq = Myobj.abc then
    *技巧6:避免重复定义数组
    当我们在使用dim时,避免重新定义数组。因为你可能要用redim去重新定义数组的大小。至于要做这样的操作的话,如果你的机器内存不是很大,那么最好在一开始就考虑到最坏的打算去设置数组的长度或者设置最佳状态时的长度,在非常必要时才使用redim。当然这样并不意味着要去增加内存,如果你不是很需要的话。
    以下举例说明不恰当的使用redim
    其实在开始就定义myarray(5),而以后需要的话再用redim去增加他的大小,这样的话可能会占用一些内存,但速度就要快得多了。
    *技巧7:避免公用(全局)变量
    不要使用用public定义的变量。如果你是写vbscript或在ActiveX控件或java applet中存取变量,那么尽可能避免公用变量。public关键词通常是为以后使用设计的,既然public不能给你带来什么好处,那最好还是用dim吧。
    *技巧8:使用绝对路径
    如果可能的话尽量避免使用相对路径,而使用绝对路径。使用相对路径将需要IIS返回当前服务器路径,这就意味着对IIS的特殊请求造成执行速度低下。
    注:慢点就慢点呗,使用相对路径移植什么的都方便得多呀。
    *技巧9:使用"Dictionary"对像
    VBScript中提供的dictionary对象可提供快速查找和任意带关键词数据的存储。通过dictionary对象可以根据关键词存取数组中的各项数据,这样就能更快地找到在内存中不连续的内容(因为你是指定你正在使用的关键词,而不是要知道对像在数组中存放的位置)。如果你要查找的是非线性的关键词数据,使用dictionary对象就要快得多了。
    然而,如果关键词数据在内存中是连续的,那么数组在查找、存储数据起来将更快。同时也需要注意的是在dictionary中建立索引要比在数组中慢。你应该选择对你来说效果最好的数据结构。
    *技巧10:充分利用浏览器的回退功能
    如果你使用的是个smart的浏览器,那么他会帮你做很多的回退工作,只要用得着,不妨多用用。那么,通过你的脚本执行回退,当有任何错误发生时你可以回到前面去,并从后访问数据库。但要记住的是,当你访问服务器上存在的数据库时就要执行一次对数据库的操作。如果你要返回的那个窗体有很多变量的话,那就有点划不来了。如果你确实知道你需要在客户端执行很多代码,那么为了加快执行速度把代码移到客户端。当你在客户端运行时,处理器就归你了,服务器呢,只好用他自身的处理能力去处理他所接到的请求。
    还有个好办法,如果你使用的窗体中用了很多服务器端的脚本并且有不少条件输入,那么最好把这些触发反应的代码放到客户端脚本引擎中去(比如vbscript,javascript)。忽略这些,服务器代码运行得就快了,因为对于那些不是很必要的代码就不送到服务器端执行了。当然这仅对那些比较小的代码适用,至于大的嘛,就不太合适了。
    *技巧11:避免使用服务器端变量
    通过服务器端变量进行访问数据时,就需要web向服务器提出请求,然后收集所有的服务器端变量,而不仅仅只是你请求的那个变量。这就类似于你要从发霉阁楼的盒子里找一样特定的东西。当你要找那个东西时,首先要从阁楼里找到盒子。当你请求一个变量时服务器也是一样,当遇到你请求的哪个变量时触发执行,然后再去请求那些不会引起执行点的变量。
    *技巧12:使用"option explicit"
    在asp文件中写上。和c不同,vb允许你在不强制定义变量之前就可以使用该变量。把option explicit打开有助于识别没定义的变量,使用没定义的变量就会出现错误提示信息。同时也可以使那些没申明的局部变量非法。没申明的局部变量和全局变量一样慢(比定义过的局部变量要慢一倍)。把option explicit打开自然能帮你把这些小虫子从你的代码中去掉。
    *技巧13:将采集到的值拷贝到本地(局部)变量当中
    如果有一些值是你要反复用到的话,把这些值用局部变量的形式拷贝到客户端。每次当你要用到这些值时,就省去了你去那一堆值里面去找了,这样也就加快了脚本运行速度。
    *技巧14:谨慎使用session对像
    使用session对象可以存储一些用户特殊信息。当用户在该应用程序的不同页之间跳转,存放在session中的变量不会丢失,相反,这些变量在整个用户过程中一直保留。当一个页面被一个未有session的用户请求时,web服务器会自动建立一个session对象。当session的时间限制到了或是被中断了时,服务器就会撤消session对象。为了避免这种情况,你可以把session属性关闭。然而在iis3.0中在每个应用中的session属性不能关闭。把整个服务器中的session关闭速度会快一些,但这样会损失很多功能。最好是需要时谨慎使用session对像
    当你在整个应用中都用到session对像时,注意要快点用,否则session对像将会被重置。在iis4.0中,每个应用基础中的session状态都可以被激活,也可以在specified.asp文件中被取消。
    *技巧15:做性能测试

(0)

相关推荐

  • 15种ASP技巧

    *技巧1:给应用层文件使用GLOBAL.ASA     将文件加载GLOBAL.ASA中的一个应用层数组中,而不是通过使用ASP文件系统对像在页面上读取文件.     GLOBAL.ASA可用于指定事件脚本,也可用于声明拥有session或应用程序范围的对象.它不直接显示给用户,而是存储应用层事件的信息和对象.然后通过页面就可以指向存有数据的应用层数组.这就意味着每有一个服务器端请求就读一次文件,不是每个用户每页读一次.你可以运行一个独立的ASP文件去刷新应用层数组的内容,同时你也可以考虑使用d

  • 经验丰富程序员才知道的15种高级Python小技巧(收藏)

    目录 1.通过多个键值将对象进行排序 2.数据类别 3.列表推导 4.检查对象的内存使用情况 5.查找最频繁出现的值 6.属性包 7.合并字典(Python3.5+) 8.返回多个值 9.列表元素的过滤 filter()的使用 10.修改列表 11.利用zip()来组合列表 12.颠倒列表 13.检查列表中元素的存在情况 14.展平嵌套列表 15.检查唯一性 1.通过多个键值将对象进行排序 假设要对以下字典列表进行排序: people = [ { 'name': 'John', "age&quo

  • 15个Vue技巧,你都知道吗

    目录 前言 1.将一个prop限制在一个类型的列表中 2.使用引号来监听嵌套属性 3.知道何时使用v-if 4.单个作用域插槽的简写 5.将局部和全局的style混合在一起 6.重写子组件的样式 7.如何在Vue之外创建一个具有响应性的变量 8.v-for中的解构 9.在指定范围内循环 10.窃取prop类型 11.检测元素外部(或内部)的单击 12.从组件外部调用一个方法 13.监听数组和对象 14.template标签的另一个用途 15.处理错误(和警告)的更好方法 前言 学习成为一个更好的

  • Python中隐藏的五种实用技巧分享

    目录 1. ... 对象 2.解压迭代对象 3.展开的艺术 4.下划线 _ 变量 5.多种用途的else 循环 异常处理 1. ... 对象 没错,你没看错,就是 "..." 在Python中 ... 代表着一个名为 Ellipsis 的对象.根据官方说明,它是一个特殊值,通常可以作为空函数的占位符,或是用于Numpy中的切片操作. 如: def my_awesome_function():     ... 等同于: def my_awesome_function():     Ell

  • 三种asp.net页面跳转的方法

    第一种方法:response.redirect 这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但它可以跳转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同时不能跳过登录保护.但速度慢是其最大缺陷!redirect跳转机制:首先是发送一个http请求到客户端,通知需要跳转到新页面,然后客户端在发送跳转请求到服务器端.需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到session. 代码如下  using System; using Syst

  • 一些Asp技巧和实用解决方法

    一些Asp技巧和实用解决方法 随机数: <%randomize%> <%=(int(rnd()*n)+1)%> 查询数据时得到的记录关键字用红色显示: <% =replace(RS("字段X"),searchname,"<font color=#FF0000>" & searchname & "</font>") %> 通过asp的手段来检查来访者是否用了代理 <%

  • 11种ASP连接数据库的方法

    ASP连接数据库的11种方法--本文总结了使用ASP链接各种数据库的方法: 1.Access数据库的DSN-less连接方法: set adocon=Server.Createobject("adodb.connection") adoconn.Open"Driver={Microsoft Access Driver(*.mdb)};DBQ="& _ Server.MapPath("数据库所在路径") 2.Access OLE DB连接方

  • C++获取文件大小的4种常见技巧分享

    C++编程语言在程序开发应用中能够帮助我们轻松的完成许多功能需求.比如今天为大家介绍的C++获取文件大小的方法,就可以以多种方式轻松的实现.现在将会实现方法呈现给大家,以便大家参考. C++获取文件大小代码示例: #include < iostream> #include < io.h> #include < sys\stat.h> #include < afx.h> #define _AFXDLL using namespace std; void mai

  • Java中的15种锁

    目录 一.公平锁 / 非公平锁 1.公平锁 2.非公平锁 二.可重入锁 / 不可重入锁 1.可重入锁 2.不可重入锁 3.ReentrantLock中可重入锁实现 三.独享锁 / 共享锁 四.互斥锁 / 读写锁 1.互斥锁 2.读写锁 五.乐观锁 / 悲观锁 1.悲观锁 2.乐观锁 六.分段锁 七.偏向锁 / 轻量级锁 / 重量级锁 1.锁的状态 2.偏向锁 3.轻量级 4.重量级锁 八.自旋锁 1.什么是自旋锁? 2.Java如何实现自旋锁? 3.自旋锁存在的问题 4.自旋锁的优点 5.自旋锁

  • 15种 C++ 常见报错原因分析

    目录 1 重定义变量 2  缺少分号 3 数组维数错误 4  关于 if 与 else 5  关于 if 与 else 6  括号匹配错误 7  关于字符串的输入错误 (*) 8  写错函数 / 变量名 本文整合了部分 C/C++ 常见的报错原因,可根据自己的情况,使用目录跳转. 1 重定义变量 #include<bits/stdc++.h> using namespace std; int main() { int a; cin>>a; int a; cout<<a&

随机推荐