【Nodejs】Node.js入門

ここに画像の説明を挿入

1 はじめに


Node の重要性は自明であり、多くのインターネット企業はすでに Node 上で多数の高性能システムを実行しています。Node は、シングルスレッド、非同期などにより、非常に高いパフォーマンスのベンチマークを達成します。さらに、現在最も一般的な Web 開発モデルは、フロントエンドとバックエンドの分離の形式です。つまり、フロントエンド開発者とバックエンド開発者が好みの IDE 上で独立して開発し、データとデータ間の相互作用を実現します。 HTTP または RPC を介して処理します。Node の強力な機能によって、この開発モードはますます効率的になり、さまざまなインターネット企業によってますます好まれています。

1.1 フロントエンドの学生がバックエンドを学ぶ理由/バックエンドの学生がフロントエンドを学ぶ理由

  • フロントエンドとバックエンドの対話プロセスを理解します。
  • フロントエンドの学生は、バックグラウンドで開発するプログラマーとよりスムーズに統合し、よりスムーズにコミュニケーションできるようになります。
  • Web サイトのビジネス ロジックをフロントエンドにする必要がある場合、フロントエンド担当者は、対応するタスクを完了するためにいくつかのバックグラウンド開発テクノロジを学ぶ必要があり、その逆も同様です。
  • 知識の視野と技術スタックを広げ、グローバルな視点からプロジェクト全体を検討できるようになります。

1.2 フロントエンドの学生が Node.js を学ぶ必要がある理由

(1) Node.js は JavaScript 言語を使用してサーバーサイド アプリケーションを開発します。これは、フロントエンドの学生が始めるのに便利です (一部の企業では、Node.js 開発を習得するためにフロントエンド エンジニアを要求することもあります)。

(2) フロントエンドとバックエンドの文法の統一を実現し、フロントエンドコードとの統合を促進し、一部のコードも共通化します。

たとえば、インターフェイスによって返されるさまざまなフィールドについては、フロント エンドとバック エンドの両方を検証する必要があります。この時点で、Node.js がバックグラウンド開発に使用されている場合、フロントエンドとバックエンドで検証コードを共有できます。

(3) Node.js は高いパフォーマンスとアクティブなエコシステムを備えており、多数のオープンソース ライブラリを提供しています。

(4) Jeff Atwood は 2007 年に有名な Atwood の法則を提案しました。JavaScript で実装できるアプリケーション システムは、最終的には JavaScript で実装されることになります。Jeff Atwood が誰であるかは問題ではなく (彼は Stack Overflow Web サイトの共同創設者です)、重要なのはこの法律です。

2.Node.jsとは何ですか?


2.1 公式の定義

Node.js は、Chrome V8 エンジンに基づく JavaScript ランタイム環境です。Node.js はイベント駆動型のノンブロッキング I/O モデルを使用するため、軽量で効率的です。Node.js のパッケージ管理ツール npm は、世界最大のオープンソース ライブラリ エコシステムです。Node.js は言語でも、JavaScript のフレームワークでも、Nginx のような Web サーバーでもなく、サーバー側の JavaScript の動作環境 (プラットフォーム) です。

2.2 Node.jsの構成

Node.js での JavaScript の実行は、Chrome での JavaScript の実行とどのように異なりますか?

どちらも同じ JS エンジンを使用します。Node.js での JS の記述は、フロントエンドでの JS の記述とほぼ同じです。書き方の違いは、Node.js にはブラウザやページタグに関連する API がありませんが、Node.js に関連する API がいくつか追加されています。平たく言えば、開発者にとって、フロントエンドでの JS の記述はブラウザの制御に使用されますが、Node.js 環境での JS の記述はコンピューター全体を制御できます。

JavaScript の構成は 3 つの部分に分かれていることがわかっています。
ECMAScript

  • DOM: ラベル要素に関連する API
  • BOM: ブラウザ関連の API
  • ECMAScript は JS の構文であり、JS 用の DOM および BOM ブラウザー側 API です。

Node.js の構成は次のように分かれています。

  • ECMAScript。ECMAScript のすべての構文は Node 環境で使用できます。
  • ノード環境によって提供されるいくつかの追加 API (ファイル、ネットワーク、およびその他の関連 API を含む)。

以下に示すように:
ここに画像の説明を挿入

2.3 概要

  • ノードはサーバーサイドの JavaScript インタープリターです
  • Node.js は、Chrome V8 エンジンに基づく JavaScript ランタイム環境です。
  • Node.js はイベント駆動型のノンブロッキング I/O モデルを使用しており、軽量かつ効率的です。
  • Node.js のパッケージ マネージャー npm は世界最大のオープンソース ライブラリ エコシステムです
  • Node.js は動的言語であり、サーバー上で実行される Javascript

3. Node.jsの応用


Node.js には強力な開発者コミュニティがあり、現在では比較的成熟した技術システムと巨大なエコシステムを開発しています。Web サービス、開発ワークフロー、クライアント アプリケーション、その他多くの分野で広く使用されています。中でも、Web サービスの分野では、業界で Node.js の受け入れが最も進んでいます。

3.1 BFF中間層

BFF、つまり、Backend For Frontend (フロントエンドのバックエンドとして機能します)。Yubo 氏は、「フロントエンド テクノロジーからエクスペリエンス テクノロジーへの進化」という記事で、BFF レイヤーの概念を次のように指摘しました。
BFF 模式下,整体分工很清晰,后端通过 Java/C++ 等语言负责服务实现,理想情况下给前端提供的是基于领域模型的 RPC 接口,前端则在 BFF 层直接调用服务端 RPC 接口拿到数据,按需加工消费数据,并实现人机交互。基于 BFF 模式的研发,很适合拥有前端技术背景的全栈型工程师。这种模式的好处很明显,后端可以专注于业务领域,更多从领域模型的视角去思考问题,页面视角的数据则交给前端型全栈工程师去搞定。领域模型与页面数据是两种思维模式,通过 BFF 可以很好地解耦开,让彼此更专业高效。

Web サービスでは中間層を構築し、フロントエンドは中間層のインターフェイスにアクセスし、中間層はバックグラウンドで Java/C++ サービスにアクセスします。このタイプのサービスの特徴は、サーバーのコンピューティング能力をあまり必要としないことですが、プログラムの柔軟性には高い要件が課されることです。これら 2 つの機能は、Node.js の利点と一致します。Node.js は BFF レイヤーに非常に適しており、次のような利点があります。

  • フロントエンドの場合: フロントエンドにバックグラウンド データを自由に組み立てられる機能を持たせることで、ビジネス上のコミュニケーション コストを大幅に削減し、ビジネスの反復を高速化できます。さらに、フロントエンドの学生はバックグラウンドとのコミュニケーション方法を独自に決定できます。 。
  • 背景や運用保守面では、セキュリティ(メインサーバーが外部に公開されない)、メインサーバーの複雑さの軽減などのメリットが挙げられます。

3.2 サーバー側のレンダリング

クライアント側レンダリング (CSR / クライアント側レンダリング): フロントエンドは多数のインターフェイスを通じてデータを要求し、JS を通じてページ構造と表示を動的に処理および生成します。利点は、フロントエンドとバックエンドの分離、サーバーの負荷の軽減、部分的なリフレッシュです。欠点は、SEO に役立たないこと (ページが Ajax 経由でコンテンツを非同期的に取得する場合、クローラーはページ コンテンツをクロールする前に非同期の完了を待機しません)、最初の画面のレンダリングが遅いことです。

サーバーサイドレンダリング (SSR / サーバーサイドレンダリング): サーバーが返すのはインターフェースデータではなく、ブラウザーで直接表示できるページ全体 (またはフロア全体) の HTML 文字列です。つまり、サーバー側で直接レンダリングされ、パッケージ化されて一度にフロントエンドに返されます。利点はSEOに優れており、最初の画面のレンダリングが非常に速いことです。

概要: 検索エンジンの最適化 + 最初の画面速度の最適化 = サーバー側のレンダリング。

注: ここでの「サーバーサイド レンダリング」は、Node.js を中間層として使用するだけであり、バックエンドを置き換えるものではありません。ご安心ください。

参考リンク:
Vue サーバーサイド レンダリングの概念
サーバーサイド レンダリング (SSR) とクライアントサイド レンダリング (CSR) の違い、および最初の画面の最適化に関するいくつかの考え方
サーバーサイド レンダリング (SSR) は
ハングするはずです

歴史的なレビュー:
(1) 当初、ページは非常に単純で、HTML はバックエンド (PHP、ASP、JSP など) によってレンダリングされていました。ページ内のjsが非常に面倒(簡単ではあるが落とし穴が多い)であることがバックエンド側で判明したため、同社は「フロントエンドカット絵坊主」と呼ばれるjsを専門に書く人を採用してほしいと会社に依頼した。 」。

(2) Node.jsやフロントエンドMVCの台頭、フロントエンドの複雑化に伴い、徐々に「フロントエンドとバックエンドの分離」へと進化していきました。

(3) フロントエンド SPA アプリケーションが普及した後、SEO が大きな問題であり、最初の画面のレンダリング速度が非常に遅いことが判明しましたが、どんなに困難な道を選択しても、続行する必要がありました。そのため、Node.js を使用してサーバー上でレンダリングすることが解決策とみなされていました。

(4) 以前一緒にいたときは、バックエンドがフロントエンドの仕事の一部をしていましたが、今一緒にいるときは、フロントエンドがバックエンドの仕事の一部をしています。

3.3 小規模サービスおよび小規模 Web サイトのバックエンド (Express および Koa フレームワークに基づく)

現在、多くの企業が Node.js を使用してバックグラウンド管理システムのインターフェイスを開発していますが、結局のところ、バックグラウンド管理システムにはパフォーマンスと同時実行性に対する高い要件がありません。Node.js を使用すると、JS を通じて DB を直接操作し、追加、削除、変更、確認、インターフェイスの生成ができるため、フロントエンドの学生の学習の敷居が大幅に下がります。

もちろん、バックグラウンドでの人手が足りないために Node.js 開発を行うこともあります。そのため、バックグラウンド開発の作業負荷の一部がフロントエンドの学生に移管されます。

3.4 プロジェクト構築ツールの作成

フロントエンドで広く使われている構築ツールgulpやWebpackはNode.jsをベースに実装されています。

3.5 PCクライアントソフトの作成(Electronフレームワークベース)

Electron フレームワークは Node.js に基づいており、クライアント ソフトウェアの開発に使用できます。

Electron (以前は Atom Shell として知られていました) は、GitHub によって開発されたオープンソース フレームワークです。Electron は、Node.js をランタイムとして、chromium をレンダリング エンジンとして使用するため、開発者はフロントエンド テクノロジ スタックである JS を使用して、クロスプラットフォームのデスクトップ GUI アプリケーションを開発できます。

驚かれるかもしれませんが、プログラマーが使用しているコード エディター VS Code ソフトウェアは、Electron フレームワークに基づいて開発されています。Electron を使用して開発された他のよく知られたアプリケーションには、Skype、GitHub Desktop、Slack、WhatsApp などがあります。

また、海外ゲーム実況の元祖として知られるゲーム実況サイト「Twitch」のPC側クライアントソフトにはElectronフレームワークが採用されています。Twitch の Web サイトのビジョンが PC 側のビジョンとほぼ同じであることがわかります。両端で JS 言語を使用すると、既存のプロジェクトを大幅に再利用できます。

3.6 有名な Node.js オープンソース プロジェクト

ここに画像の説明を挿入

  • Express: Node.js のよく知られた Web サービス フレームワーク。
  • Koa: Node.js の次世代 Web サービス フレームワーク。いわゆる「次世代」は Express に相対的なものです。
  • Egg: 2016 年に、Alibaba は、エンタープライズ レベルの Web サービス フレームワークとして知られる、有名な Egg.js オープン ソース プロジェクトを開発しました。Egg.js は Koa に基づいて開発されています。
  • mocha: 最も人気のある JavaScript テスト フレームワークで、ブラウザーと Node 環境の両方で使用できます。
  • PM2: ノードのマルチプロセス管理。
  • jade: JS 言語に限定されない、非常に優れたテンプレート エンジンです。
  • CoffeeScript: JavaScript の最良の部分を簡潔な方法で紹介します。
  • アトム:編集者。
  • VS Code: 最もクールなエディター。
  • socket.io: リアルタイム通信フレームワーク。

3.7 概要

おそらく、Node.js で実行できるバックグラウンド アプリケーションは Java/C++ でも実行できますが、Node.js は別の選択肢を提供します。

短期的には、Node.js が Java/C++ のようにバックグラウンドでの主要な開発言語になることは困難です。これは Node.js のパフォーマンスの問題によるものではなく、主に Node.js がまだ比較的新しく、経験が少なすぎてフレームワークのサポートが不十分であるためです。エンタープライズレベルのサービスに関しては、Node.js は Java/C++ にかなわないため、現時点では「軽量」しか実行できませんが、将来は期待できます。

言語能力を制限するのは言語そのものではなく生態学である。

4. Node.jsの特徴

  • 非同期、ノンブロッキング IO モデル
  • イベントループ
  • シングルスレッド
  • まとめ: 軽量で効率的

Node.js は非常にパフォーマンスが高く、効率的です。

従来の Java 言語では、リクエストによってスレッドが開始され、リクエストが処理されるとスレッドが閉じられます。Node.js はこのモデルをまったく使用せず、基本的に単一のスレッドです。

「スレッドはどのようにして大量のリクエストに対応し、高い同時実行性にどう対処するのか?」と疑問に思うかもしれません。これは、Node.js が非同期のノンブロッキング モデルを使用しているためです。

ここでのいわゆる「シングルスレッド」とは、Node のメインスレッドが 1 つだけであることを意味します。メイン スレッドがブロックされないようにするには、メイン スレッドを使用してクライアント要求を受信します。ただし、特定のタスクには対応しません。ノードの背後にはスレッド プールもあり、長時間実行されるタスク (IO 操作やネットワーク操作など) を処理します。スレッド プール内のタスクは、キューとイベント ループのメカニズムを通じて実行されます。

5. Node.js使用時のデメリット


  • プログラムの動作が不安定のため、サービスが利用できない可能性があります
  • プログラムの実行効率が低く、1 秒あたりのリクエスト数が低いレベルに維持されます。
  • フロントエンドの学生はサーバーサイドのテクノロジーに精通していません。

おすすめ

転載: blog.csdn.net/weixin_43094619/article/details/131896109