当前位置:编程学习 > asp >>

VBScript - JScript:谁怕谁?

答案:导读     
  在ASP环境下,VBScript和JScript哪种语言更好一些?本文测试这两种脚本语言完成常见操作所需要的时间,分析它们各自的长处和不足,并根据测试结果得出了一些值得关注的结论。
作者:仙人掌工作室 2000-12-19
   原文出处:http://www.asptoday.com/articles/20000920.htm
   选择方案体系需要考虑许多因素,往往关系到基于性能、容量、可维护性、职员经验、现有基础、个人爱好的成本优势分析。在典型的Microsoft/IIS实现中,这种考虑将继续深入扩展到ASP与大量不同的COM+组件协作时所担当的角色:在一个极端,注重性能远远超过编程和维护的方便程度,ASP只作为整合业务逻辑和用户界面的“粘合剂”;在另一个极端,注重编程和维护的方便程度超过性能,ASP本身用于实现许多业务逻辑。
   这种考虑甚至还可以继续深入一步,分析ASP的两种主要脚本语言(VBScript和JScript)相对而言各有哪些优缺点。从功能上看,赞成JScript的人可以说JScript提供了诸如更好的错误控制、继承、位操作以及一种客户端、服务器端基本通用的脚本语言等优点;反过来,赞成VBScript的人可以说VBScript也有自己的特点,如极其丰富的本地化能力,大小写无关的代码,更加简单直观的语法(当然,C程序员对这一点会有异议)。极端地说,我们不仅可以达到这样一个在同一网站不同ASP页面上分析两种语言各自优点的深度,而且在单个ASP页面之内也是如此!
   虽然有时在同一ASP页面内使用多种脚本语言能够简化编程,但它对性能不利。只需粗略地考虑一下这个问题,我们就知道运行这种ASP页面需要启动并缓存两个脚本引擎,极大地增加了开销。(而且,即使我们可以忽略性能问题,混合运用两种脚本语言本身就是不安全的,这是因为引擎缓冲机制将影响执行顺序。简而言之,如果开发者不小心的话,使用二个或以上脚本引擎的ASP页面可能不会顺序地执行。)
   本文所要深入研究的就是这个Windows 2000 / ASP3.0平台上VBScript对比JScript(以及VBScript加JScript)的性能问题。具体地说,本文将回答下列问题:
是否其中一种脚本语言要比另外一种快一点?
如果是,是在哪种情形之下以及为什么?
是否存在混合使用两种脚本语言可以减少执行时间的情形?(这种情形是否具有现实意义?)
如果某种语言总是比另外一种要快,两者速度差异的大小是否足以成为选择脚本语言的考虑因素?
   为回答这些问题,我们将比较8个典型例程的执行时间,这些例程用VBScript、JScript以及两者结合编写(两者结合是指,一种脚本语言作为ASP页面的主要语言(基本语言),由它来调用另一种脚本语言编写的内嵌函数)。这8个例程是:
字符串翻转(颠倒),
在一个字符串内搜索另一个字符串,
正则表达式模式匹配,
位移操作,
简单数学计算,
复杂数学计算,
数组初始化,
ADO记录集遍历。
   分析方法
   鉴于影响Web应用性能的因素是如此众多,而且真正困难的可能还在于配置出一个完全受控制的(也叫做“不现实的”)测试环境,本文的目的不是给出两种语言性能比较而言其差异的精确测度,而是给出各种编程方案下性能相对优势的可靠指示。
   这就是说,我们的目标不是为了知道JScript的正则表达式模式匹配操作要比VBScript的快23%,我们主要关心的是:是否存在这种差异,这种差异一般有多少明显,在什么样的情况下存在这种差异,以及为何会如此。
   本文只给出汇总(平均)数据。如果要查看更具体的数据,可以在data.xls找到原始的测试结果。data.xls可以从本文后面下载。
   测试是在一个桌面系统上进行,配置为:400MHz Celeron处理器,128 MB RAM,操作系统是Windows 2000 Server (5.00.2195),Web服务器是运行ASP 3.0 (asp.dll 5.0.2180.1)的IIS 5.0.2157.1。脚本引擎(JScript和VBScript)的版本是5.1.0.4615。测试期间系统所运行的服务减小到最小数量,而且为尽可能地保证测试环境的稳定性,这个最小数量一直保持不变。
   此外,考虑到IIS的默认脚本引擎设置可能造成测试结果的偏差,许多测试在两种可能的默认脚本引擎设置下进行。在所有测试过的方案中,该因素均不影响执行时间的先后和执行结果差异的大小。
   测试工具
   两个测试用的工具页面分别用VBScript(default.asp)和JScript(default-js.asp)编写。这两个页面具有同样的功能:让测试者选择一个ASP页面并指定执行该页面的次数,记录精确到千分之一秒的累计执行时间(见下图)。(被执行页面由测试工具页面的Server.Execute调用)。

  


                     【图1】
   同样,考虑到脚本引擎的初始化操作可能影响被调用页面的执行时间,许多测试方案都分别用两个测试工具页面在不同的IIS默认脚本引擎设置下进行了测试。和前面一样,在所有测试过的方案中该因素均不影响执行时间的先后和执行结果差异的大小。(然而,对于测试记录来说,即使IIS的默认脚本引擎设置成了JScript,用VBScript写的测试工具页面还是要比用JScript写的测试工具页面稍微快一点)。
   性能度量标准
   本文测试的性能度量标准是执行时间。执行时间四舍五入到最接近的毫秒值。如果测试工具页面多次执行测试页面(例如1000次的Server.Execute调用),执行时间起始位置在包围测试页面调用的“For loop”循环之前,执行时间的结束位置在循环结束后。
   基于VBScript的测试工具页面用Timer()函数计算执行时间,基于JScript的测试工具页面用JScript的Date对象计算执行时间。
我们选择了八个不同的测试例程(所有测试用到的代码已经在本文后面的下载ZIP文件中提供)。如果语言本身不具备某个方法或函数,则编写一个专用的方法。
   1.字符串翻转:进行这个测试不仅是因为它是一个很有代表性的操作,而且因为VBScript提供了内建的StrReverse()函数而JScript却没有等价的函数或方法。这为我们提供了一个很好的混合语言编程测试案例。本测试中被翻转的字符串是“String Reversal”。
   2.在一个字符串中搜索另一个字符串: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).

上一个:利用 WSH 作定時工作排程(转自:LearnASP)
下一个:以前收集的一些资料---如何在ASP中通过ODBC调用Excel中的数据

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,