検索
ホームページウェブフロントエンドjsチュートリアルNode.js_node.js のいくつかの機能の詳細については、こちらをご覧ください。

Node.js は、プログラマーがスケーラブルなアプリケーションを迅速に構築できるように設計された新しいバックエンド言語です。 Node.js には多くの魅力的な機能があり、それに関するレポートが無数にあります。この記事では、ユーザーが Node.js をより深く理解できるように、EventEmitter、Streams、コーディング スタイル、リンティング、コーディング スタイルなどの機能を分析して説明します。

Chrome JavaScript ランタイム上に構築されたプラットフォームとして、JavaScript の知識はノード アプリケーションに適用できるようです。追加の言語拡張や変更を行わなくても、フロントエンド プログラミングの経験をバックエンド プログラミングに適用できます。

EventEmitter (イベントエミッター)

まず、EventEmitter モデルを理解する必要があります。イベントを送信し、消費者が関心のあるイベントをサブスクライブできるようにします。これは、コールバック配信パターンを非同期関数に拡張したものと考えることができます。特に、複数のコールバックが必要な場合は、EventEmitter の方が有利です。

たとえば、呼び出し元は「ファイルのリスト」リクエストをリモート サーバーに送信します。返された結果をグループ化し、グループごとにコールバックを実行することもできます。 EventEmitter モデルを使用すると、各グループに「ファイル」コールバックを送信し、すべての操作が完了したときに「終了」処理を実行できます。

EventEmitter を使用する場合、関連するイベントとパラメーターを設定するだけで済みます。

コードをコピーします コードは次のとおりです:

var EventEmitter = require('events').EventEmitter
var util = require('util');
function MyClass() {
if (!(MyClass のこのインスタンス)) new MyClass() を返します。
EventEmitter.call(this);
var self = これ; setTimeout(function timeoutCb() {
Self.emit('myEvent', 'hello world', 42); }, 1000); }
util.inherits(MyClass, EventEmitter);


MyClass コンストラクターは、トリガー遅延 1 秒とトリガー イベント myEvent を持つ時間トリガーを作成します。関連イベントを使用するには、on() メソッドを実行する必要があります:



コードをコピーします

コードは次のとおりです:

ここで、サブスクライブされた EventEmitter イベントは非同期イベントですが、時間がトリガーされると、リスナーのアクションが同期されることに注意してください。したがって、上記の myEvent イベントに 10 個のリスナーがある場合、イベント ループを待たずにすべてのリスナーが順番に呼び出されます。

EventEmitter のサブクラスが Emit('error') イベントを生成しても、それをサブスクライブするリスナーがいない場合、EventEmitter 基本クラスは例外をスローし、プロセス オブジェクトの実行時に uncaughtException がトリガーされます。


エラー

verror は基本クラス Error の拡張であり、printf 文字形式を使用して出力メッセージを定義できるようになります。

ストリーム

処理する必要がある非常に大きなファイルがある場合、理想的な方法は、ファイルがどれほど大きくても、時間が許す限り、その一部を読み取り、その一部を書き込むことです。ここではストリームの概念を使用する必要があります。ストリームは、Node で広く使用されているもう 1 つのモデルであり、EventEmitter の実装です。読み取り可能、書き込み可能、​​または全二重インターフェイスを提供します。これは、読み取り可能、書き込み可能、​​ドレイン、データ、終了、クローズなどの定期的な操作イベントを提供する抽象インターフェイスです。パイプラインを使用してこれらのイベントを効果的に統合できれば、より強力な対話型操作が実現されます。 .pipe() を使用することで、Note はパイプラインを介してバックプレッシャーと通信できます。バックプレッシャーとは、書き込み可能なもののみを読み取る、または読み取り可能なもののみを書き込むことを意味します。

たとえば、標準入力からローカル ファイルとリモート サーバーにデータを送信しています。

コードをコピー

コードは次のとおりです:


var fs = require('fs');

var net = require('net'); var localFile = fs.createWriteStream('localFile.tmp'); net.connect('255.255.255.255', 12345, function(client) { Process.stdin.pipe(client); process.stdin.pipe(localFile);
});

データをローカル ファイルに送信し、gunzip を使用してストリームを圧縮したい場合は、次のようにすることができます:

コードをコピーします コードは次のとおりです:

var fs = require('fs');
var zlib = require('zlib');

process.stdin.pipe(zlib.createGunzip()).pipe(fs.createWriteStream('localFile.tar'));

ストリームについて詳しく知りたい場合は、ここをクリックしてください。

制御フロー

JS にはファーストクラスのオブジェクト、クロージャ、その他の機能概念があるため、コールバック権限を簡単に定義できます。これはプロトタイプを作成するときに非常に便利で、必要に応じて論理権限を統合できます。ただし、扱いにくい組み込み関数も簡単に使用できるようになります。

たとえば、一連のファイルを順番に読み取り、特定のタスクを実行したいとします。

コードをコピー コードは次のとおりです:

fs.readFile('firstFile', 'utf8', function firstCb(err, firstFile) {
doSomething(firstFile);
fs.readFile('秒ファイル', 'utf8', 関数 SecondCb(err, SecondFile) {
doSomething(2 番目のファイル);
fs.readFile('thirdFile', 'utf8', function thirdCb(err, thirdFile) {
doSomething(第三ファイル);
});
});
});

このモデルの問題は次のとおりです:

1. これらのコードのロジックは非常に分散していて無秩序であり、関連する操作プロセスを理解するのが困難です。
2. エラーまたは例外処理はありません。
3. JS におけるクロージャ メモリ リークは非常に一般的ですが、診断と検出が困難です。

入力セットに対して一連の非同期操作を実行したい場合は、フロー制御ライブラリを使用するのが賢明な選択です。ここでは Vasync が使用されます。

vasync は、非同期操作から発想を得たプロセス制御ライブラリです。その特徴は、消費者が特定のタスクの処理を表示および観察できることです。この情報は、エラーの発生過程を検討するのに非常に役立ちます。

コーディングスタイル

プログラミング スタイルはカジュアルなものが多いため、最も物議を醸すトピックであると言えます。ニンジンとキャベツ、人それぞれ好みがあります。重要なのは、個人とチームの両方に適したスタイルを見つけることです。いくつかの伝統的な継承により、ノード開発の行程が改善される可能性があります。

1. 関数に名前を付けます
2. すべての関数に名前を付けてみます。
3. 閉鎖を避ける
4. 関数内に他の関数を定義しないでください。これにより、予期しないクロージャのメモリ リーク事故の多くを減らすことができます。
5. 関数の追加と縮小

V8 JIT は強力なエンジンですが、より小さく合理化された機能は V8 とより良く統合されます。さらに、私たちの関数が小さくて精巧なもの (約 100 行) であれば、それを読んで保守するときに自分自身に感謝するでしょう。

プログラムによるスタイルのチェック: スタイルの一貫性を維持し、検査ツールを使用してそれを強制します。 jsstyleを使用しています。

リンティング (コード検査)

Lint ツールは、コードを実行せずにコードの静的分析を実行し、潜在的なエラーやリスク (case 切り替え時の Break ステートメントの欠落など) をチェックできます。 Lint は単にスタイル チェックに相当するものではなく、主観的なスタイル選択ではなく、客観的なリスク分析を目的としています。チェック項目が豊富なjavascriptlintを使用しています。

ロギング

プログラムやコーディングを行うときは、長期的な視点を持つ必要があります。特に、デバッグにどのツールを使用するかを検討してください。優れた最初のステップは、効果的なロギングです。デバッグ中に特に注意を払う価値があるもの、実行時の分析と調査に何が使用されるのかを確認するために、情報を特定する必要があります。直接 Node.jsロギング ライブラリ である Bunyan を使用することをお勧めします。データ出力形式は JSON です。詳細については、ここをクリックしてください。

クライアントサーバー

アプリケーションに分散処理機能があれば、市場での魅力はさらに高まります。同様のインターフェイスは、HTTP RESTFul API または生の TCP JSON を使用して記述することができます。これにより、開発者は、Node エクスペリエンスを非同期ネットワーキング環境と組み合わせたり、分散型のスケーラブルなシステムでストリームを使用したりすることができます。

よく使用されるツール:

1. 修正します

簡単に言えば、これは REST サービスを構築するためのツールです。優れた表示とデバッグ処理のサポートを提供し、Bunyan と DTrace をサポートします。

2. 速い

fast は、TCP を使用して JSON メッセージを処理する軽量ツールです。 DTrace サポートを提供し、サーバー クライアントのパフォーマンス特性を迅速に特定できるようにします。

3. ワークフロー

ワークフローはrestifyに基づいて構築されており、一連のリモートサービスとAPIのビジネスプロセスを定義できます。例: エラーステータス、タイムアウト、再接続、輻輳処理など。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン