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

Node.js_node.js のいくつかの機能の詳細については、こちらをご覧ください。

May 16, 2016 pm 04:35 PM
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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

win7 home バージョンと win7 Ultimate バージョンの違いの紹介 win7 home バージョンと win7 Ultimate バージョンの違いの紹介 Jul 12, 2023 pm 08:41 PM

win7システムには、win7Ultimateバージョン、Win7Professionalバージョン、Win7Homeバージョンなど、多くのバージョンがあることは誰もが知っています。多くのユーザーは、HomeバージョンとUltimateバージョンの間で迷っており、どのバージョンを選択すればよいかわかりません。そこで今日は、Win7 Family Meal と Win7 Ultimate の違いについて説明します。 1. Experience Different Home Basic Edition を使用すると、日常の操作がより迅速かつ簡単になり、最も頻繁に使用されるプログラムやドキュメントにより迅速かつ便利にアクセスできるようになります。 Home Premium は最高のエンターテインメント体験を提供し、お気に入りのテレビ番組、写真、ビデオ、音楽を簡単に楽しんだり共有したりできます。 Ultimate Edition は、各エディションのすべての機能を統合し、Windows 7 Home Premium のすべてのエンターテイメント機能とプロフェッショナル機能を備えています。

ノードのバッファーについて詳しく見る ノードのバッファーについて詳しく見る Apr 25, 2023 pm 07:49 PM

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。

Spring MVC の主要な概念をマスターする: これらの重要な機能を理解する Spring MVC の主要な概念をマスターする: これらの重要な機能を理解する Dec 29, 2023 am 09:14 AM

SpringMVC の主要な機能を理解する: これらの重要な概念を習得するには、特定のコード例が必要です。 SpringMVC は、開発者が Model-View-Controller (MVC) アーキテクチャ パターンを通じて柔軟でスケーラブルな構造を構築するのに役立つ Java ベースの Web アプリケーション開発フレームワークです。ウェブアプリケーション。 SpringMVC の主要な機能を理解して習得すると、Web アプリケーションをより効率的に開発および管理できるようになります。この記事では、SpringMVC の重要な概念をいくつか紹介します。

プレゼンテーション層の Node.js アプリケーションを効率的に開発する方法について説明する記事 プレゼンテーション層の Node.js アプリケーションを効率的に開発する方法について説明する記事 Apr 17, 2023 pm 07:02 PM

フロントエンド アプリケーション開発に Node.js を使用するにはどうすればよいですか?次の記事では、Node でフロントエンド アプリケーションを開発する方法 (プレゼンテーション層アプリケーションの開発を含む) を紹介します。今日私が共有したソリューションは単純なシナリオ向けであり、フロントエンド開発者がコーディング経験がなくても、Node.js に関する背景知識や専門知識を習得することなく、いくつかの単純なサーバーサイド開発タスクを完了できるようにすることを目的としています。

Golang にはクラスのようなオブジェクト指向機能はありますか? Golang にはクラスのようなオブジェクト指向機能はありますか? Mar 19, 2024 pm 02:51 PM

Golang (Go 言語) には伝統的な意味でのクラスの概念はありませんが、構造体と呼ばれるデータ型が提供され、これによってクラスと同様のオブジェクト指向機能を実現できます。この記事では、構造体を使用してオブジェクト指向機能を実装する方法を説明し、具体的なコード例を示します。構造体の定義と使用法 まず、構造体の定義と使用法を見てみましょう。 Golang では、type キーワードを通じて構造を定義し、必要に応じて使用できます。構造には属性を含めることができます

ニーズと機能に基づいて、該当する Go バージョンを選択してください ニーズと機能に基づいて、該当する Go バージョンを選択してください Jan 20, 2024 am 09:28 AM

インターネットの急速な発展に伴い、プログラミング言語は常に進化し、更新されています。中でもGo言語はオープンソースのプログラミング言語として近年注目を集めています。 Go 言語は、シンプル、効率的、安全で、開発とデプロイが簡単になるように設計されています。高い同時実行性、高速なコンパイル、メモリの安全性などの特徴を備えており、Web開発、クラウドコンピューティング、ビッグデータなどの分野で広く使用されています。ただし、現在、Go 言語のさまざまなバージョンが利用可能です。適切な Go 言語バージョンを選択するときは、要件と機能の両方を考慮する必要があります。頭

See all articles