検索
ホームページウェブフロントエンド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 までご連絡ください。
JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール