Node.js:JavaScriptですか?

ご挨拶、 exports.users.habrauser



1週間ほど前、ハブに「問題」に対処した記事が掲載されました。Node.jsはJavaScriptかどうかです。 この記事で提示された議論のいくつかは公平でしたが、残念ながら根拠がありません。 他の議論は完全に不条理であり、真実ではありませんでした。 この分野の記事の著者の知識については書かず、この記事へのリンクすら提供しません(したがって、記事は下書きに転送され、アーカイブにのみ残ります)。 Node.jsとJavaScriptスクリプトを、誰もが見慣れている方法で比較するだけです。



はじめに



始めるには、Wikipediaにアクセスして、Node.jsとJavaScriptが何であるかを調べます。

NodeまたはNode.jsは、V8エンジンに基づくJavaScriptプログラミング言語のサーバー側実装です。 Webサーバーなどのスケーラブルな分散ネットワークアプリケーションを作成するように設計されています。 Node.jsは、PythonのTwistedフレームワークおよびRubyのEventMachineフレームワークに使用方法が似ています。 ほとんどのJavaScriptプログラムとは異なり、このフレームワークはクライアントのブラウザーではなく、サーバー側で実行されます。
JavaScriptは、プロトタイプ指向のスクリプトプログラミング言語です。 これはECMAScriptの方言です。


まあ、Node.jsの定義は少しあいまいで、私はそれが正しくないと言う必要があります。 次に、公式ウェブサイトの情報をご覧ください。

Node.jsは、高速でスケーラブルなネットワークアプリケーションを簡単に構築するためのChromeのJavaScriptランタイム上に構築されたプラットフォームです。 Node.jsは、イベント駆動型のノンブロッキングI / Oモデルを使用するため、軽量で効率的であり、分散デバイス間で実行されるデータ集約型のリアルタイムアプリケーションに最適です。


ここで最も重要な言葉はプラットフォームです 。 Node.js全体を特徴付けます。 上記から、Node.jsはブラウザーと同様にJavaScriptランタイムであると結論付けることができますが、唯一の違いはDOMにアクセスできないことです(実際、サーバー側で必要なのはなぜですか? DOMを使用-jsdom)。



Googleはそれと何をしなければなりませんか?



そして本当に、さらに? はい、Node.jsはGoogleのV8に基づいていますが、それだけです。 GoogleがNode.jsの開発に何らかの形で関与していることを聞くことは、米国で「ロシア」と言い、ステレオタイプの「熊」、「バラライカ」、「ウォッカ」を聞くことと同じです。 最初は、プロジェクトの作者が開発中です(注目すべき唯一のことは、主な作者が新しいアイデアに対処するためにプロジェクトを去ったことです)。 スポンサーシップは、Google Joyentとはまったく異なる会社が主導しています。



彼らはとても違います...



Node.jsとChromeのようなブラウザーで実行して、いくつかのコードを比較しましょう。 もちろん、些細なconsole.log(「Hello、World!」)はチェックしません もっと複雑なものを取り上げます。 たとえば、末尾再帰を使用して階乗を計算する関数:



var factorial = function (n, a) { return n < 2 ? a : factorial(n - 1, a * n); }; console.log(factorial(10, 1));
      
      





Node.jsとChromeでこのコードを実行すると、同じ結果が得られます。











しかし、この小さな例はJavaScriptチップの1つを示していません。 次に、それを使用してコードを見てみましょう-プロトタイプOOP、あまり説明しなくても明確になると思います:



 var Celsius2Fahrenheit = function (val, unit) { this.val = val; this.unit = unit; }; Celsius2Fahrenheit.prototype.setVal = function (degrees) { var degreesArray = degrees.split(" "); this.val = degreesArray[0]; this.unit = degreesArray[1]; }; Celsius2Fahrenheit.prototype.convert = function (to) { if (this.unit != to) { this.unit = to; switch (to) { case "C": { this.val = Math.round((this.val - 32) * 5 / 9); } break; case "F": { this.val = Math.round(this.val * 9 / 5 + 32); } break; } } }; var c2f = new Celsius2Fahrenheit(30, "C"); console.log(c2f.val + c2f.unit); c2f.convert("F"); console.log(c2f.val + c2f.unit); c2f.setVal("100 F"); console.log(c2f.val + c2f.unit); c2f.convert("C"); console.log(c2f.val + c2f.unit);
      
      





コードは完全に「エレガント」ではないかもしれませんが、結果は正しいコードと非常に似ています。 ブラウザで確認してください。Node.jsでも同じです。

30C

86F

100F

38C





それで、違いは何ですか? それでは、多くの組み込みライブラリがNode.js用に記述されているか、モジュールと言う方が正しいという事実から始めましょう(それに応じて、それらを接続するための指示がありました-require)。 Node.jsは、通常のJavaScriptとは異なり、 コールバック関数を頻繁に使用することにも注意してください。 そして、あなたが表面的に見れば、それがすべてです。 他の違いを見つけるには、さらに深く掘り下げる必要があります。




JavaScriptの今日、明日Node.js



確かに、Node.jsとJavaScriptは異なります。 プラットフォームと言語の比較はやや奇妙ですが、やはり予約をします。JavaScriptでは、クライアント側で実行されるスクリプトと、サーバー上のNode.jsを意味します。



これらが同じコインの2つの異なる側面である場合、一方から他方に切り替えるのは難しいですか? 前述の記事のコメントで書いたように、「ステアリングホイールをどこに回しても問題ありません。あなたはまだ回します。」 意味:スクリプトがどちら側で実行されていても、JavaScriptはJavaScriptのままです。 これが私を魅了したノードです。js:サーバーとクライアントの部分を2つの異なる言語で記述する必要はありません。同じコードを使用する必要がある場合は、古き良きCtrl-C Ctrl-Vを使用するだけです。 他の人のために話をするつもりはありませんが、PHPでのサーバー側の記述からNode.jsにすばやく切り替え、問題に気付きませんでした。



安定したい!



アプリケーションの安定性については、いつまでも話すことができます。 誰もが安定した動作を保証することはできません;常にランダムな要因が存在します。 また、Node.jsもChromeやWindowsのように例外ではありません...しかし、非常に頻繁に(少なくとも2週間に1回)更新されます。 それについて文句を言うのは罪です...



あとがき



もちろん、このテキストで私は「問題」に対する私のビジョンを表明し、誰も怒らせたくありませんでした。 もっと多くの違いがあると言う人がいると思いますが、まだ気づいていません。 私がどこか間違っている、または何かを終えなかったと思われる場合は、コメントで建設的な議論を受け付けています。



All Articles