Node要領


ノードって何?NodeJavaScript実行プラットフォームです.特徴:非同期とイベント駆動メカニズム、およびその標準ライブラリ.Nodeの動力源はV8 JavaScriptエンジンから来ており、Google Chromeにサービスを提供するChromiumプロジェクトグループによって開発された.V8JavaScriptコードの解釈と実行を担当する.c++バインディングレイヤを使用して、libuvおよびv8を結合することができる.nodev8特性:shipping,staged,in progressの3つのグループを含む.npm要求Nodeプロジェクトが存在するディレクトリの下にpackage.jsonファイルがあります.package.jsonファイルを作成する最も簡単な方法はnpmを使用します.nodeプログラム主要分:
  • webアプリケーション
  • コマンドラインツール
  • バックグラウンドプログラム
  • デスクトッププログラム
  • Webアプリケーション:単一ページアプリケーションを提供する簡単なプログラム、restマイクロサービス、およびスタック全体のwebアプリケーション.
    mkdir example-project
    cd example-project
    npm init -y

    コアモジュール:nodeのコアモジュールは、サーバ側JavaScriptを記述するために必要なツールである他の言語の標準ライブラリに相当します.
    イベントモジュールは、イベントを処理する小さなライブラリであり、nodeのほとんどのapiはそれに基づいています.nodeファイルシステムライブラリ,fs,path,tcpクライアントとサービス側ライブラリnet,httpライブラリ,ドメイン名解析ライブラリdns,テストの断言ライブラリassert,プラットフォーム情報を照会するオペレーティングシステムライブラリosである.
    非同期I/OAjaxリクエストを開始します.
    $.post('/url',{title: 'web'}, function(data){
        console.log('     ');
    });
    
    console.log('  ajax  ');

    受信応答はajax送信が終了した後に出力される.Ajaxpost要求によりajax要求をサーバに送信し、サーバは要求を処理し、応答データを返信してコールバックを実行する.
    ファイルの読み込み:
    var fs = require('fs');
    
    fs.readFile('/path',function(err,file){
        console.log('      ')
    });
    
    console.log('      ');
    readFile()は、fs.readFile()非同期呼び出しnodeによって要求を処理し、コールバックを実行するためにデータを返す.
    2つのファイル読み込みタスクの所要時間は、最も遅いファイル読み込みの所要時間に依存します.
    fs.readFile('/path1', function(err,file){
        console.log('    1  ');
    });
    
    fs.readFile('/path2',function(err, file){
        console.log('    2  ');
    });

    コアモジュールとストリームの使用
    const fs = require('fs');
    const zlib = require('zlib');
    const gzip = zlib.createGzip();
    const outStream = fs.createWriteStream('output.js.gz');
    
    fs.createReadStream('./node-stream.js')
    .pipe(gzip)
    .pipe(outStream)

    同期の場合、それらの消費時間は2つのタスクの消費時間の合計です.
    非ブロックI/O
    非ブロックI/Oは、プログラムが他のイベントを行うときにネットワークリソースを取得するために要求を開始し、ネットワーク操作が完了すると、この操作の結果を処理するためにコールバック関数を実行することを示す最下位の用語です.
    一般的なNode Webアプリケーションで、WebアプリケーションライブラリExpressでショップの受注プロセスを処理します.NodeおよびExpressには、httpルータ、非ブロックネットワークI/O、スレッドなど、libuvが含まれています.
    ブラウザは、要求を開始することによって、非ブロックI/Oを通じて、アプリケーションに転送して在庫をチェックし、ユーザーを登録し、返信メールを送信し、http応答を行い、非ブロックネットワークI/Oに戻り、ブラウザに応答するJSON HTTP応答を返す.同時に返信メールを送信し、データベースを更新します.
    イベントとコールバック関数Node内蔵httpサーバライブラリ、すなわちコアモジュールhttp.Serverは、ストリーム、イベント、ノードのhttp要求解析器の組合せで要求を処理する.
    イベントポーリング:3つの非ブロックネットワークコール:
  • 要求用
  • データベース用
  • 応答用
  • イベントポーリングは、一方向に実行される先入先出キューです.ajax非同期コミットサービス側プロセス:
    var http = require('http');
    
    var querystring = require('querystring');
    
    http.createServer(function(req, res){
        var postData = '';
        req.setEncoding('urf8');
        req.on('data',function(num) {
            postData += num;
        });
        req.on('end',function(){
            res.end(postData);
        });
    }).listen(8080);
    console.log('       ');
    ajax要求はsuccessイベントをバインドした.
    $.ajax({
        'url': '/url',
        'method': 'POST',
        'data': {},
        'success': function(data){
            // success  
        }
    });

    使用するnodehttp書き込みhello world
    例:
    const http = require('http');
    const port = 8080;
    
    const server = http.createServer((req, res) => {
        res.end('hello');
    });
    
    server.listen(port,()=>{
        console.log('server');
    });

    シングルスレッド
  • Nodeブラウザでのシングルスレッドの特徴を保持しています.
  • 単一スレッドの欠点は、マルチコアJavaScriptを利用できないことです.エラーはアプリケーション全体の終了を引き起こし、アプリケーションの堅牢性が試されます.
  • 大量計算占有cpu非同期I/Oの呼び出しを続行できません.
  • cpuは、Web Workers大きな計算ブロックJavaScriptレンダリングの問題を解決するために、作業スレッドを作成して計算することができる.
  • 作業スレッドは、メインスレッドをブロックしないように、実行結果をメッセージングによって伝達し、メインスレッドのUIに作業スレッドがアクセスできなくなる.
  • サブスレッドの出現は,UI単一スレッドの頑丈性とマルチコアの利用不能Nodeの問題に余裕を持って対応できることを示している.

  • I/O密集型とCPU密集型
  • CPUネットワーク向けでパラレルI/Oが得意で、より多くのハードウェアリソースを効率的に組織し、より良いサービスを提供することができます.
  • I/O密集の利点は主にNodeイベントループの処理能力を利用して、各スレッドを各リクエストサービスのために起動するのではなく、リソースの占有量が極めて少ないことにある.
  • Node前後端プログラミング言語環境統一;高性能I/Oは、リアルタイムアプリケーションに使用されます.
  • パラレルI/Oにより、使用者は分散環境を効率的に利用でき、安定したインタフェースを有効に利用してwebレンダリング能力を向上させることができる.
  • Nodeオブジェクト
    クラスの構造:
    function User() {
        //    
    }
    
    User.prototype.method = function() {
        //   
    };

    es6
    class User {
        constructor(){
    
        }
        method(){
    
        }
    }
    [1,2,3].map(n=>n*2).filter(n=>n>3);

    ジェネレータは非同期I/Oを同期プログラミングスタイルにすることができます.prototypeアプリケーションライブラリにジェネレータが使用されています.
    テンプレート文字列Koa Web適用
    this.body = `
    

    web

    jeskson

    `;

    デバッガ
  • web付属のスケジューラは、単一ステップ実行とnode、読み取り、計算、出力、ループをサポートします.
  • REPLサポートnodeデバッグプロトコル

  • 1つのChromeアプリケーション:
    mkdir hello_express
    cd hello_express
    npm init -y
    npm i express --save
    express webでは、関数は1等オブジェクトです.JavaScriptは、他のスクリプト言語よりも非同期リアルタイムプログラムを書くことができます.nodeは、高速、プラットフォーム間、非ブロックI/Oを提供するローカルライブラリです.libuvは、デバッガと依存マネージャnodeを備えています.npmは、v8ランタイムとして使用される.