NodeJs簡明教程(1)

3440 ワード

NodeJs簡明教程はゼロからNodeJs関連の知識を学び、JS開発者を支援して全スタック開発技術スタックを構築します.
本論文はNodeJs簡明教程の第一編であり、NodeJs全体構成及び重点概念を紹介する.
NodeJsは一体何ですか?
公式的な言い方を見てみます.
As an asynchronous event driven JavaScript runtime、Node is designed to build scalable network apple network appications.In the following“hellowed world”example、mancontions can handed carred concurrently.Upon therech thelfick
Google翻訳バージョン:
非同期イベント駆動のJavaScriptとして動作する場合、Nodeは、伸縮可能なネットワークアプリケーションを構築することを目的とする.以下の「ハローワールド」の例では、複数の接続を同時に処理することができる.接続するたびにフィードバックが発生しますが、仕事がないとNodeは休止します.
上の紹介を結び付けて、結論を出すことができます.
NodeJsの本質はJavascriptが実行する時です.この運転は非同期イベント駆動に基づいて動作します.
非同期
本稿での非同期は、非同期IOを指す.ウィキペディアによる異歩IOの定義[2]:
非同期IOは、コンピュータオペレーティングシステムが入出力に対して、IO要求を開始するスレッドがIO操作を完了するまでは待たずに後続のコードを実行し、IO結果が他の方法でIO要求を開始するプログラムを通知する処理である.非同期IOに対して、IO要求を開始するスレッドは、IO動作が完了するまで、呼び出し中のIO動作関数から返されない(すなわち、ブロックされた).
一言で言えば、
IO要求を実行すると、呼び出し側は実行結果を待たずに次のコードを実行し続け、IO操作が完了したら実行者に「実行済み」と伝えます.NodeJsで通知方式は「コールバック」です.
イベントドリブン
イベント駆動はスレッド駆動に対して行われる.スレッドドライバ下のサーバは、要求ごとに新しいスレッドを作成して処理します.ウィキペディアのイベント駆動の定義[3]:
イベントドライバモデルにおけるシステムは、基本的にはイベントサイクルを設計して形成されるプログラムであり、このイベントサイクルプログラムは、現在処理すべき情報を継続的にチェックし、処理すべき情報に基づいてトリガ関数を実行して必要な処理を行う.この外部情報は、おそらくキーボードやマウスの動作、または一時的なイベントから、フォルダフォルダフォルダ内のファイルから来ています.
NodeJsのHTTPサーバを例にとると、server.listen関数を呼び出すと、NodeJsはクライアントからの要求があるときに、NodeJsはこの要求をキューに入れて後続の処理を行い、マスタスレッドとポーリングクライアント要求をキューに組み込み、キュー内の要求が実行されると、コールバック関数としてメインスレッドに通知するループを繰り返す.
Javascript実行時
Javascriptが実行する時は複雑な概念です.本文ではJavascriptの運行を紹介する前に、Javascriptエンジンを紹介します.
Javascriptエンジン
ウィキペディアの定義[4]:
JavaScriptエンジンはJavaScriptスクリプトを専門に扱う仮想マシンで、ウェブブラウザに付属するのが一般的です.
個人的な理解:
Javascriptエンジンは主にJavascriptコードに対して語法、文法などの分析を行い、コンパイラでコードを実行可能なマシンコードにコンパイルしてコンピュータに実行させます.
現在業界で有名なJavascriptエンジンはV 8以外にないです.
運転時の組成
Javascriptはブラウザで実行してもいいし、サーバー(NodeJs)で実行してもいいし、あるAPIまたはオブジェクトはブラウザだけ(例えばDOM、BOMなど)があり、あるAPIまたはオブジェクトはサーバの中にしかない(ファイル操作、HTTPサーバなど).
Javascriptは、実行時にJavascriptエンジン、特定環境API、イベントサイクル、イベントキューを含む.
NodeJsアーキテクチャ図
NodeJsはC++言語によってlibuvに基づいて開発され、階層的に設計されています.JavascriptはV 8に基づいて提供された上部インターフェースだけです.言い換えれば、上部インターフェースを他の言語に置き換えるとPHPが実現します.PHPは非同期イベント駆動のサーバーを実現できます.運転時の名前はNODE-PaHPとなります.
  • Node standard library NodeJs標準ライブラリも、開発者に直接に呼び出されるトップクラスのコード
  • である.
  • Node bindings Javascriptとlibuvはこの階で通信して、V 8に基づいて言語障壁
  • を打開します.
  • V 8はJSコード
  • を実行します.
  • libuv高性能非同期I/O、イベント駆動、スレッド池のライブラリもNodeJs高性能の保証
  • です.
  • C-aresは、非同期DNS
  • を提供する.
  • http_parser、OpenSSL、ZlibはHTTP解析、openssl加復号、データ圧縮などのインターフェース
  • を提供する.
    NodeJsは一体シングルスレッドですか?
    いいえ、メインスレッドJavascriptスレッドは単一スレッドで、libuvはスレッドを提供しています.NodeJsはJavascriptエンジンだけではなく、一連の実行時に、Javascriptスレッドを孤立させてはいけません.
    NodeJsはなぜこんなに早いですか?
  • 単スレッドは、マルチスレッド環境におけるスレッド切り替えオーバーヘッドおよび可能なスレッド同期オーバーヘッドを解決する
  • を含む.
  • 非同期+イベント駆動は、NodeJsのメインスレッドがブロックされないことを保証し、ずっと要求を受けています.
    NodeJsの長所と短所と適切なシーン
  • は、メインスレッドJavascriptスレッドが単一スレッドであるため、メインスレッドはCPUの密集操作(例えば、何かを復号するなど、このような操作はJavascriptスレッドのみで実行され、イベントサイクルがブロックされます)を行うことができません.したがって、NodeJsはI/O密集シーンに適しています.例えば、よくある(TCP/HTTPサーバ)
  • は、フロントエンドの開発者にとって、言語の敷居がほとんどない
  • .
  • はプラットフォームにまたがり、NodeJsは主流のオペレーティングシステムに対応するバイナリプログラム
  • があります.
  • 標準倉庫は強大で、第三方倉庫も多いです.ホイールのコストを下げました.
  • は配置が容易で、サーバーはNodeJsプログラムをインストールしてNPMパケットマネージャと協力して実行できます.PHPのように拡張をインストールしなくてもいいです.先端HTTPサーバ
  • を構成します.
    おわりに
    このシリーズの文章に引き続き注目してください.
    参考文献
  • About NodeJs
  • 非同期IO
  • イベント駆動
  • Javascriptエンジン