
この出版は
昨年の
私の投稿と続く
記事の続きです。 1年間、テストスクリプトはディスク上のどこかにありました。 JavaScriptとC#の比較には至りませんでした。これは、JScript.NETの恥ずべき失敗の後、提案されました。 私はC#で積極的にプログラミングしているのに、JavaScriptでテストを適切に翻訳する強さを自分自身に感じていなかったので、来ませんでした。 さらに、私は試運転を行いましたが、奇跡はないように思えました。 今、私はまだ誰もが試せるように、テストパッケージを整理することにしました。 おそらく誰かがC#との適切な比較を追加する力を持っているでしょう。
1年後のテスト結果、Githubへのリンク、IE9自体の外部でIE9 JScriptエンジンを使用する新しい(
古い )方法がカットされます。
IE9のエンジン。
IE9はこの1年で公式に発表されました。 以前は、リリース後、新しいJScriptエンジンがシステム内の古いJScriptエンジンに置き換わると考えていました。 だから、以前はすべてのエンジンでした。 しかし、公式IE9をインストールした後、C:\ Windows \ System32ディレクトリにjscript.dllとjscript9.dllの2つのライブラリがあることがわかりました。
IE9のインストール後、Windows Script Hostは引き続き古いバージョン5.8エンジンを使用します。 レジストリ内のライブラリの名前を変更する古いトリックは機能しません。 同時に、jscript9.dllライブラリはレジストリの別のGUIDで登録されます。 IEの外で新しいエンジンを使用するという希望を失い始めましたが、解決策はまだ見つかりました。GUIDjscript9.dllをWindows Active Scripting用の別のScripting Engineとして登録するだけです。 次の* .regファイルを使用して実行しました。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\JavaScript9]
[HKEY_CLASSES_ROOT\JavaScript9\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"
これで、コマンドラインからJScriptの9番目のバージョンでスクリプトを実行できます。
cscript.exe // E:JavaScript9 script.jsテストパッケージ
パッケージ
はGithubに投稿されています。 パッケージ自体に加えてテストを実行するには、次のものが必要です。
- NodeJS- EXEファイルのみをダウンロードしてインストールできます。
- JSDB-公式Webサイトからアーカイブをダウンロードして 、どこかで解凍できます 。
- JScript.NETコンパイラ-適切なバージョンの.NET Frameworkをインストールします。
- JScriptインタープリターエンジン-システムに既にあるものを使用できます。 IE9がインストールされている場合、前のセクションで説明した操作を実行する必要があります。 古いバージョンをテストしたい場合...誰が必要ですか!?
テストを実行するには、一連の単純なCMDファイルが使用されます。 ファイルによって起動されたテストセッション
dotest.cmd
テストにエンジンを含めるには、このファイルの対応する行のコメントを外してください。
各インタープリターテストは、run。*。Cmd、JScript.NETテストがcomp.NET。*。Cmdファイルによって実行される形式の対応するファイルによって起動されます。 テストを実行する前に、次を確認してください。
- *。cmdファイルがエンジンの実行可能ファイルを正しくポイントしている(それらがPATH環境変数に登録されていない場合)
- 必要なcomp.NET。*。cmdファイルのパスは、.NET Frameworkのインストール済みバージョンを示していること
テストを実行するたびに、結果サブフォルダーに新しいHTMLファイルが作成されます。これは、プレゼンテーションの準備がほぼ整ったテスト結果です。
テスト自体はtestsフォルダーにあります。 そこにテストを追加できますが、必ずしも異なるエンジンのパフォーマンスを比較する必要はありません。 たとえば、同じエンジン内で同じ問題のさまざまな解決策を検討することができます。 次にテストファイルの例を示します。
!function(){ var str1 = 'Hello ', str2 = 'world ', str3 = 'test ', i = 0; tests.push({ name: 'String Concat', func: function(){ i++; return str1+str2+str3+' '+i; }, reduce: function(r,x){ return r+x.length;}, start: 0, loops: 100000 }); }();
ご覧のとおり、tests配列に次のプロパティを持つオブジェクトを追加する必要があります。
- name-テストの名前;
- func-コードが異なるエンジンで正しく機能することを確認するために、何らかの結果を返すことができるテストコード。
- reduce-テストの反復結果を蓄積する関数。
- start-reduceの開始値。
- loops-テストの反復回数。
最後のテスト結果







結果を写真形式で公開する方が簡単でした。 誰かが表形式のデータを必要とする場合、
ここにソースファイル
があります。
興味深いのは、ネイティブテストでは、新しいV8が古いものよりはるかに高速であり、私の場合は少し遅いことです。
また、これらのテストは、非同期入力/出力におけるNodeJSの利点をまったく反映していないことにも注意してください。 すべてのテストは同期的であり、V8エンジンの異なるバージョンのみをテストしています。 NodeJSの非同期の利点を正確にテストするには、特別なテストを作成する必要があります。 確かに、この場合、このパッケージで他に何と比較するかは明確ではありません。 他のエンジンは、同様のイベントループ機能を提供しません。
さて、最後に、いつものように、無意味な評価:

はい、今年のハードウェアは異なり、JScript 5.8は明らかに優れた結果を示しました。 ただし、ビルド5.8は少し異なります。