Node.jsはWindows Script Hostよりどれくらい高速ですか? そして、これは私たちに何を教えてくれますか?

[引用] ページの中央にあるNodeJS.orgにアクセスした読者は、サイト構築のリーダーからの4つの引用を見て、Nodeの喜びを表現しています。 引用符は毎分変化します。 運が良ければ(またはページをリロードするときの忍耐力)、読者はMicrosoft Open Technologies、Incの Claudio Caldatoから賞賛を受けるでしょう -ご参考までに、この引用を右の図に引用します。



何がそのような賞賛に命を吹き込んだのですか? 確かに、Nodeエンジンが生まれるずっと前から、Microsoftはスクリプトを実行するための独自の(Windows 98からWindowsに組み込まれたWindows、およびInternet Explorer 5でインストールされた)ツール-Windows Script Hostを持っていたようです。



この質問に対する答えは明らかです。Node.jsははるかに高速です。 (ちなみに、彼はより簡単なAPIも持っています。しかし、速度が主なものです。)



しかし NodeはWSHよりどれくらい高速ですか?



経験的に見つけることは難しくありません。 昨日evgeniyupがWSHのパフォーマンスとObjectScript言語の仮想マシンのパフォーマンスを比較したスクリプトを取り上げます。 スクリプトの最初に、数十行を追加します 。Node.jsの「松葉杖」は、 WSH関数 WScript.Echoが実装されていない状態で実装されます。



スクリプトのソースコードを表示(または再度非表示)します
// CScript to Node.js: if (typeof WScript == "undefined") WScript = {}; if (typeof WScript.Echo == "undefined") WScript.Echo = function(){ var i; var log = ''; for (i=0; i < arguments.length; i++){ log += arguments[i]; } console.log(log); } var fannkuch = function(n) { var p = [], q = [], s = [], sign = 1, maxflips = 0, sum = 0; var i; for(i=1; i<=n; i++) p[i] = q[i] = s[i] = i; for(;;){ // Copy and flip. var q1 = p[1]; // Cache 1st element. if(q1 != 1){ for(i=2; i<=n; i++) q[i] = p[i]; // Work on a copy. var flips = 1; for(;;){ var qq = q[q1]; if(qq == 1){ // ... until 1st element is 1. sum = sum + sign*flips; if(flips > maxflips){ maxflips = flips; } // New maximum? break; } q[q1] = q1; if(q1 >= 4){ var i = 2, j = q1 - 1 for(;;){ var tmp = q[i]; q[i] = q[j]; q[j] = tmp; if(++i >= --j) break; } } q1 = qq; flips++; } } // Permute. if(sign == 1){ var tmp = p[2]; p[2] = p[1]; p[1] = tmp; sign = -1; // Rotate 1<-2. }else{ var tmp = p[2]; p[2] = p[3]; p[3] = tmp; sign = 1; // Rotate 1<-2 and 1<-2<-3. for(i = 3;; i++){ // print "mark 4" var sx = s[i]; if(sx != 1){ s[i] = sx-1; break; } if(i == n) return [sum, maxflips]; // Out of permutations. s[i] = i; // Rotate 1<-...<-i+1. var t = p[1]; for(var j = 1; j <= i; j++){ p[j] = p[j+1]; } p[i+1] = t; } } } } function getTimeSec(){ var d = new Date(); return (d.getTime() + d.getMilliseconds() / 1000.0) / 1000.0; } var n = 10; var start_time = getTimeSec(); var r = fannkuch(n); var sum = r[0], flips = r[1]; WScript.Echo( sum,"\n", "Pfannkuchen(",n,") = ",flips,"\n", "time = ",(getTimeSec() - start_time),"\n" )
      
      





その後、このスクリプトを2回(最初にNodeで、次にWSHで)実行するだけで十分です-コンソール(およびスクリーンショット )でこの結果を取得します



[スクリーンショット]



違いは2桁です! Node.jsが1秒で実行できることを計算すると、 Windows Script Hostは2分以上粉砕されています。



Pentium 4プロセッサ(2.2 GHz)上のWindows XP SP3で測定ました 上記の方法に従って、各自が自宅で個別に繰り返すことができます。



結論は非常にシンプルで、誰もがアクセスできます。JavaScript言語であるV8エンジンの出現により、再生が生き延びたと言えます。 言語のルールは1つのiotaを変更していませんが、計算能力は100倍に増加しています(ECMAScript Harmony標準ドラフトからのオプションの新製品の外観を除く)。



現実の世界では、これはスーパーヒーロー漫画の人々にのみ起こります。 そして、プログラミングでは、厄介なことが簡単に起こります。開発者がjavascriptでプログラミングした後、 V8が登場し、すべてのスクリプトが100倍速く動作し始めました。



そして、これは見通しにさらに深く反映することになるでしょう。 たとえば、昨日 evgeniyupは 、PHP 5.3.3 WSHよりも速く動作しない ことを 測定 しましたどこか 1.2倍。 したがって、この領域では、 JITコンパイルやその他のV8のようなトリックによって速度が大幅に向上する可能性がありますが、これまで、いわゆるPHPアクセラレータはすべて、せいぜいバイトコードキャッシングとそれを最適化する試みに取り組んできました。しかしそれ以上。 PHPが100倍高速に実行を開始すると、WWWの世界がどのように変わるか想像してみてください。



または、少なくとも1桁速くなります。



All Articles