まったく役に立たないテストNo. 1:PHPとGroovy

最近、 Grailsフレームワークのテンプレートテストを比較するように依頼されました。 このようなテストが必要な理由と、実際にアプリケーションのパフォーマンスについて彼らが言うこと-私は知りません。 しかし、それは楽しく、人々は本当にそのようなテストが好きです。



実際、Grailsにはテンプレートエンジンはありませんが、サーバーページ(GSP-Groovy Server Pages)内で使用できるGroovy言語があります。 そこで、Groovy言語のパフォーマンスを測定したいと思います。 基本言語はPHPです。



なぜなら ロードモードでの本格的なテストには実稼働サーバーが必要です。このテストは大幅に簡素化され、コンテナーなしで実行されます。



装備品

ゴミ箱サーバーIBM 325、Intel®Pentium-4 2.40GHz、1GB RAM。



テストプログラム

コードの観点から見たWebアプリケーションのスタッフィングの95%は、サイクル、オブジェクトの作成、オブジェクトのフィールドへのアクセスで構成されています。 これらの理由により、コンソールモードで動作する2つの単純なプログラムが作成されています。



(重要な部分はページコンテンツの出力でもあり、これらのテストでは考慮されていません-これにはコンテナでの完全なテストが必要です)



Test.php

 <?php class My { public $x; public $y; public $z; } $t1 = gettimeofday(true); $arr = array(); for($i = 0; $i < 100; $i++) { $entry = new My(); $entry->x = 'A'; $entry->y = 'B'; $entry->z = 'C'; array_push($arr, $entry); } $iterations = (int) $argv[1]; print $iterations." iterations.\n"; for($i = 0; $i < $iterations; $i++) { $x = null; foreach($arr as $entry) { $x = $entry->x.$entry->y.$entry->z; } } print "\n".(gettimeofday(true) - $t1)." sec.\n"; ?>
      
      







Test.groovy

 class My { def x, y, z; } def t = System.currentTimeMillis() arr = [] for(def i = 0; i < 100; i++) { def entry = new My(x:'A',y:'B',z:'C') arr << entry } def iterations = args[0] as int; println "Using ${iterations} iterations."; for(def k = 0; k < iterations; k++) { def x = null for(def entry : arr) { x = entry.x + entry.y + entry.z } } println "${(System.currentTimeMillis() - t) / 1000.0} sec.";
      
      







ソフトウェア

PHP 5.2.6(cli)(ビルド:2008年5月8日08:38:47)

Groovyバージョン:1.6.3 JVM:Java HotSpot(TM)Server VM(ビルド14.0-b16、混合モード)



結果

反復回数 Test.php、秒 Test.groovy、秒
10.000 1.38 2.07
20,000 2.77 3.15
30,000 4.2 4.3
50,000 6.9 6.5
100,000 13.8 12.1
300,000 41 34
500,000 68 57
1,000,000 136 111


結論

Groovyプログラムのパフォーマンスは、反復回数が増えると大幅に向上します。 これは、HotSpotコンパイラの動作が原因である可能性が最も高いです。



別のポイント-PHPアクセラレーターを試すことができます。 これに基づいて、Zendを試しましたが、特に影響はありませんでした。 xyzフィールドのアクセス許可修飾子を無効にすると、PHPスクリプトが高速化されたことは面白いです。






All Articles