3.建立JSP测试环境
由于Sun为JSP制订了详细的规范,所以满足JSP规范的容器很多,此外JDK也有很多版本,我选用了相对最为简单、用户比较多的Tomcat 5.5.5作为JSP容器,JDK选用了1.4.2。为了调试程序方便,又在笔记本电脑上安装了著名的eclipse 3.0和lmboz 3.0,先在笔记本上开发,然后再发布到Linux上测试。 Eclipse的配置比较繁琐,尤其是和lmboz搭配使用时,很多细节不注意就不能达到预期目的,比如我为了在eclipse下实现JSP单步调试,足足折腾了两天,现在可以了还是不明白为什么可以。 总体感觉在eclipse下开发JSP还是挺爽的,但是机器配置要高,lvmboz有时行为很怪异,多试几次才能解决问题。 下面是测试JSP整数性能的代码:
class Debug { private long startMs;
public void startTimer() { startMs = new java.util.Date().getTime(); }
public double endTimer() { return ( new java.util.Date().getTime() - startMs ) / 1000.0; } };
Debug db = new Debug(); db.startTimer();
int count = Integer.parseInt( request.getParameter( "loopCount" ) ); int result = 0;
for( int j = 0; j < count; j ++ ) { result = 0; for( int i = 0; i < count; i ++ ) { result += i; } }
double totalTime = db.endTimer();
out.print( "<h2>Java</h2><br/>\n" ); out.print( "<h3>一共完成了" + count*count + "次整数加法。</h3><br/>\n" ); out.print( "<h3>运算结果是" + count + "个" + result+ "<h3><br/>\n" ); out.print( "<h3>共耗时" + totalTime + "秒!</h3>" );
总体感觉Java代码比PHP要好些,但相对C#还是略显繁琐。为了测试数据库性能,分别从Oracle、Microsoft、MySQL官方网站下载了最新的JDBC驱动,所有JDBC驱动都是直接访问数据库而不依赖数据库客户端,下面是JSP访问Oracle的代码,其他数据库测试代码与此类似。
Debug db = new Debug(); db.startTimer();
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String server ="jdbc:oracle:thin:@10.1.1.9:1521:testdb"; String user = "test"; String password = "test";
int owner = ( int )( 20000000 * Math.random());
Connection conn= DriverManager.getConnection( server, user, password ); conn.setAutoCommit( false );
int count = Integer.parseInt( request.getParameter( "sqlNumber" ) ); String sql = "insert into fortest values( ?, ?," + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' )"; PreparedStatement pstmt = conn.prepareStatement( sql );
for( int i = 0; i < count; i ++ ) { pstmt.setInt( 1, owner ); pstmt.setInt( 2, i ); pstmt.execute(); }
conn.commit(); pstmt.close();
PreparedStatement stmt = conn.prepareStatement( "delete from fortest where ownerid = ?" ); stmt.setInt( 1, owner ); stmt.execute(); conn.commit();
stmt.close(); conn.close();
double insertTime = db.endTimer();
out.print( "<h2>Oracle</h2><br/>" ); out.print( "<h3>完成了" + count + "次insert操作。</h3><br/>" ); out.print( "<h3>共耗时" + insertTime + "秒!</h3>" );
JDBC的数据库操作代码相当一致,而且都提供了事务支持,没费什么劲儿就调通了所有数据库测试程序,几乎是数据库编程中最容易的。
4.开发环境易用度分析
总体来看,微软提供了最好的桌面开发环境,VS2003不仅功能强大而且速度很快,特别是当用户使用的数据库是SQL Server时,优点更为突出,比如可以调试SQL。VS2003的使用和Windows的配置密切相关,有时会相当复杂,但文档和联机帮助很丰富。 Eclispse和lvmboz的组合开发JSP感觉良好,虽然开始配置比较复杂。lvmboz安装时需要注意很多细节,相关文档比较缺乏。 PHP下的集成开发环境Zend Studio速度比较慢,功能简单,安装和配置都比较容易,但文档最少。 从语言使用情况来看,C#最为简洁,Java也很好,PHP相对较差。 优胜者当然是VS 2003,Eclipse也不错。 五、单用户测试结果
单用户测试是模拟系统用户非常少时,比如并发用户只有一个的情况,这时系统有可能达到理论上的最佳性能。
1.整数运算测试结果
平台 执行整数加法次数 平均耗时 ASP.NET 4000000 0.07秒 JSP 4000000 0.08秒 PHP 4000000 39.80秒
2.浮点数运算测试结果
平台 执行浮点数加法次数 平均耗时 ASP.NET 4000000 0.15秒 JSP 4000000 0.207秒 PHP 4000000 36.20秒
3.MySQL测试结果(MyISAM引擎)
平台插入记录数 平均耗时 PHP 2000 1.93秒 JSP 2000 2.00秒 ASP.NET 2000 3.22秒
4.MySQL测试结果(InnoDB引擎)
平台 插入记录数 平均耗时 JSP 2000 2.26秒 ASP.NET 2000 3.33秒 PHP 2000 10.36秒
5.Oracle测试结果
平台 插入记录数 平均耗时 JSP 2000 6.48秒 PHP 2000 13.35秒 ASP.NET 2000 14.10秒
6.MS SQL Server 2000测试结果
平台 插入记录数 平均耗时 ASP.NET 2000 2.44秒 JSP 2000 2.69秒 PHP 2000 5.04秒
五、单用户测试结果分析
PHP的速度只在连接MyISAM引擎时表现良好,除此之外几乎一无是处,由于PHP是解释执行而且变量无类型,这造成它的数值计算速度非常慢,响应时间是ASP.NET和JSP的数百倍。 千万不要使用PHP进行复杂的数值计算,如果必须要这么做,最好使用PHP的自定义函数功能,用C实现函数后用PHP调用。 ASP.NET在其绝对速度上表现突出,在连接SQL Server 2000时性能优异。但连接Oracle速度很慢,很让人费解,可能是驱动程序没有优化所致,也可能是两个巨头在某些方面没有达成一致意见。 JSP依靠其设计优秀的JDBC在数据库操作上平均速度最快,访问所有的数据库代码都无需修改,在数值计算能力上和ASP.NET的差别几乎可以忽略不计,从这一点上来看,J2EE在企业中的地位很难动摇,何况在其背后还有这么多业界巨头和自由开发者。
上一页 [1] [2] [3] [4] [5]
|