统计在线人数...

VBScript - JScript:谁怕谁?

[ 来源:ASP教程 | 作者:Admin | 时间:2004-10-10 上午 01:17:25 | 浏览:统计中... ]

个字符串:VBScript和JScript本身都提供实现该任务的方法。我们用VBScript的InStr()函数和JScript的indexOf()方法在字符串“This is a sentence written for the sake of writing a sentence.”中查找字符串“ke”的起始位置。
3.正则表达式模式匹配:虽然VBScript最近才加入了正则表达式支持,但这仍旧是一个很好的比较测试案例。JScript提供各种各样能够接受模式的String对象方法,使我们能够更灵活地进行处理;而VBScript没有这么灵活,必须在RegExp对象所界定的范围内进行。测试页面包含一个函数,这个函数接受字符串“Regular Expression Pattern Match”以及正则表达式“/(eg)|y|t{2,}/”,并返回匹配总次数。
4.位移操作:JScript有位操作符而VBScript没有,这又是一个很好的比较测试案例。在进行这个测试的页面中将进行下列操作:97 < < 5 以及 -14 > > 2。
5.简单数学计算:进行以下计算:18976.6754 + (-908.6) + 1475.211。
6.复杂数学计算:测试页面包含这样一个函数,它根据两个点的坐标计算出它们之间的距离(英里)。VBScript的计算表达式为:
  Distance = Round(Sqr(((69.1 *(latA-latB))^2) +       ((69.1 * (Abs(lngA)-Abs(lngB)) * Cos(latB/57.3))^2)),1).
7.数组初始化:只要出现对数组元素的访问,VBScript和JScript引擎都将创建整个数组的临时拷贝,这也是一个很好的测试案例。另外,JScript的数组同时也是带有许多方法和属性的对象,而VBScript中数组只是一个数组。这个测试通过For循环初始化一个有100,000个元素的数组,每个元素都被赋予循环计数器的值。
8.ADO记录集遍历:这个测试使用的数据库是Access2000的“Northwind”数据库,程序通过ADO连接对象执行“SELECT * FROM ORDERS”命令获得一个ADO记录集。程序利用两个嵌套的循环:外部循环遍历记录,内部循环遍历每个记录的所有字段。这个测试案例之所以好,是因为JScript需要实例化一个Enumeration对象才能遍历对象集合,而VBScript只需要一个For Each ... Next循环就可以完成同样的任务。
上面的第一、三、四、六几种算法有一个共同特点:或者是其中一种语言独具某个功能,或者在正则表达式匹配和距离计算中,两种语言的差别非常大,足以成为一个很有意义的混合语言编程测试项目。这就为我们测试这些算法增加了两种方案:以VBScript作为基本语言调用内嵌的JScript函数;以JScript为基本语言调用内嵌的VBScript函数。测试代码举例如下(测试方案:字符串翻转,以JScript为基本语言,VBScript内嵌):
< %@Language=JScript% > < SCRIPT language="VBScript" runat="Server" > Function StrRevVB(strParm)   StrReverse(strParm)   End Function < /SCRIPT > < %   StrRevVB("String Reversal") % >
所有其他例程都只包含语言本身提供的功能,这些例程只用纯VBScript和纯JScript版的代码测试。换句话说,对于任何情形的混合语言编程合理性测试来说,这些例程的价值都不大。
第一组测试运行前六个例程,对于每一次运行,测试工具页面都要进行1000次对包含测试例程的ASP页面的调用(Server.Execute)。换句话说,如果某次运行调用了一个两种脚本语言都编写的页面1000次,则调用ASP引擎和各个脚本引擎的开销都达到1000次。虽然这种方法导致脚本引擎的开销影响测试结果,但我们获得的测试结果却更能反映出实际应用场合的效果。也就是说,虽然我们可以在单个页面之内完成1000次字符串翻转之类的操作,但更接近实际的是将这些代码和其他代码放入同一页面,然后让这个页面执行数千次。
第二组测试运行全部八个例程,每次运行期间测试工具页面只执行测试页面1次,但测试页面本身包含循环。字符串翻转和简单数学计算都在它们各自的ASP页面内运行10,000次。模式匹配操作执行1,000次。字符串查找、距离计算以及两个位移操作(左移和右移)操作执行10,000次。在数组初始化测试中,程序声明一个100,000个元素的数组,然后通过For循环对它进行初始化并将计数器的值赋予各个元素。在记录集遍历测试中,程序通过While外循环遍历记录集(记录集包含830个记录),通过For Each ... Next内循环遍历单个记录的各个字段(每个记录有14个字段)。
第二组测试提供的是这样一些方案,它们更加侧重于被测试例程本身的执行开销,从而更清楚地告诉我们两种脚本语言在执行时间方面的优缺点。
第一组测试的结果如下表所示。表中的数值是在不同方案下1000次ASP页面调用的平均执行时间,以秒计(每次执行ASP页面时测试例程执行一次)。 方案 语言*** 字符串翻转* 字符串查找** 正则表达式模式匹配* 位移操作* 简单数学计算* 复杂数学计算** VB - VB 2.245 2.038 4.452 2.200 2.173 2.151 JS - JS 2.690 2.214 2.635 2.166 2.288 2.313 VB - JS 3.522 - 3.430 3.035 - 3.178 JS - VB 3.185 - 5.368 3.103 - 3.004
*运行96次,其中:24次是VBScript测试工具页面、IIS默认脚本语言VBScript;24次是JScript测试工具页面、IIS默认脚本语言VBScript;24次是VBScript测试工具页面、IIS默认脚本语言JScript;还有24次是JScript测试工具页面、IIS默认脚本语言JScript。为了减小次序带来的影响,第一、三、四、六测试例程的方案所运行的次序每次都经过改变。上表所显示的时间是96次运行的平均时间。所有细节数据都可以在下载包的data.xls文件内找到。
**使用VBScript测试工具页面运行24次,IIS脚本语言设置成VBScript(没有运行其他的测试工具页面和默认脚本语言的组合,因为在最初的运行中它们没有显示出任何次序或时间差异上的影响)。
***VB代表VBScript,JS代表JScript。两种语言中的前一种是页面的基本语言,第二种是内嵌代码所用的语言。内嵌代码不用于不需要使用它的场合。
大多数测试结果的含义都非常明显,但应注意两个可能令人惊奇的结果。我们知道,JScript通过String对象的方法处理正则表达式,具有更好的灵活性,而VBScript需要实例化RegExp对象的开销。但令人惊奇的是,完全用VBScript编写的代码比以VBScript为基本语言、用内嵌JScript函数完成模式匹配操作的代码要慢。显然,实例化VBScript的RegExp对象需要非常可观的时间开销。
第二个令人惊奇的地方是,虽然事实证明JScript的位操作总是要比VBScirpt的快,但在这些测试中两者的时间差异

上一页  [1] [2] [3]  下一页

共有0人参与评价,平均得分:0分
评论内容只代表网友观点,与本站立场无关! 查看完整内容
   

当前在线人数
QQ:748838 MSN:allen_xia#msn.com E-mail:allenxia666#126.com QQ群:站长联盟北方区-北京(28200145) 站长联盟南方区-上海(67713522)