ゼファーネットのロゴ

NodeJSを使用したアプリの開発:従うべきベストプラクティス

日付:

リヤトーマスハッカー正午プロフィール写真

@リヤトーマスリヤ・トーマス

私は現在、開発者として働いています。

現在のシナリオでは、NodeJSは高品質のアプリケーションを開発するための最も人気のあるプラットフォームのXNUMXつになっています。 そのオープンソース、クロスプラットフォーム、JavaScriptランタイム環境、および崇高な機能により、開発者や製品所有者にとって優れたオプションとなっています。

アプリ開発会社はかなり長い間それを使用してきましたが、NodeJSは比較的新しいものです。 多くの人は、その特定の機能と、それらを学習した後に得られる利点についてまだ知りません。 この記事は、トップクラスのアプリケーションの開発に役立つNodeJSのベストプラクティスを理解するのに役立ちます。 それでは、始めましょう。

知っておくべきXNUMXつのNodeJSのベストプラクティス

プロジェクト用に明確に定義された構造を準備します

アプリの開発中、何百もの依存関係を持つ大規模なコードベースを管理するのは難しい場合があります。 したがって、コードを小さなチャンクに分割して整理し、それらを別のフォルダーまたはコードベースに配置することをお勧めします。 各ユニットが小さくシンプルに保たれていることを確認してください。

これを行うための最良の方法のXNUMXつは、ソフトウェアの小さな部分を設計し、スタック全体を互いにファイルを共有しない独立したコンポーネントに分割することです。 簡単に言うと、アプリケーションに関連するさまざまな懸念に対処するために、さまざまなモジュールを使用できます。 これらのさまざまなモジュールは、クライアント側でクライアント要求のさまざまな側面に対応し、応答することができます。 フォルダーの構造化は、コードを構造化および整理して、コードをより明確で読みやすくし、アプリ開発プロセスを容易にするのにも役立ちます。

元の配列での変更は避けてください。

変更は、新しい変数を作成したり、既存の変数を再割り当てしたりせずにJavaScript配列またはオブジェクトを変更したときに発生します。 JavaScriptでは、すべてが参照されます。 これは、JSで配列またはオブジェクトを変更すると、元の配列/オブジェクトが変更されることを意味します。

ミューテーションは、アプリの開発中に多くのエラーを引き起こす可能性があります。 データがどこかで不正確になり、それがどこでどのように発生するかわからない場合、予測不可能でデバッグが困難なエラーが発生する可能性があります。

コードを理解しにくく複雑にします。 配列またはオブジェクトの値はいつでも変更され、異なる可能性があります。 したがって、コード内の値を読み取るときは注意する必要があります。

以下のサンプルコードでこれを検討してください。 最初の配列は元の配列を変更するため、後で予期しないバグが発生する可能性があります。

const elements = [5,3,4,10,2];
const results = elements.sort().map(element=> element*2);
const elements = [5,3,4,10,2];
const results = [...elements].sort().map(element=> element*2);

XNUMX番目のコードでは、要素配列のコピーを作成します。そのため、元の配列には影響しません。

標準のスタイルガイドを使用する

新しいプロジェクトから新しいファイルを初めて開いたり、別の開発者からファイルを取得したりする場合があります。 次の数時間は、コードの理解、中括弧の再フォーマット、スペースからのタブの変更などに費やします。これには多くの時間がかかり、アプリ開発のプロセスが長くなる可能性があります。

これが発生してコードを簡単に理解できないようにするには、一貫したコーディングスタイルを使用することをお勧めします。 この目的のために、ESLintのようなJavaScriptリンターツールを使用できます。ESLintは、一般的なプログラミングエラーをチェックし、コードスタイルを修正するための事実上の標準です。 PrettierやBeautifyなどの他のツールは、修正をフォーマットし、ESLintと並行して機能するのに役立ちます。

VarよりもConst / Letを優先する

コードでconstを使用して変数を割り当てる場合、それを再割り当てすることはできません。 constを使用すると、同じ変数を複数の用途に使用したくなるのを防ぎ、コードをより明確にします。 たとえば、forループで変数を再割り当てする必要があると思われる場合は、letを使用して変数を宣言できます。 letを使用して変数を宣言すると、それが定義されたブロックスコープでのみ使用可能になります。 

一方、Varはブロックスコープではなく関数スコープです。つまり、ブロック内で変数を宣言できないため、エラーが発生しやすくなります。 例を通してこれを理解しましょう:

console.time('timer')
for(var i =0; i<999999; i++){}
console.timeEnd('timer')
// timer: 7.90380859375 ms
console.time('timer')
for(let i =0; i<999999; i++){}
console.timeEnd('timer')
// timer: 3.73779296875 ms

両方のコードは、ロジックに関してほぼ同じです。 ただし、XNUMX番目のコード(letを使用)は、最初のコード(varを使用)のほぼXNUMX倍の速度になります。 これは、letとconstのスコープが宣言されたブロックに対してローカルであるのに対し、varはグローバルスコープでインスタンスを作成するためです。 したがって、グローバルオブジェクト全体をトラバースしてアクセスする必要があり、これには時間がかかり、エラーが発生しやすくなります。

依存性注入を使用する

NodeJSが、アプリケーションのプログラミングと作成を簡単にするための独自の機能とNodeJSセキュリティのベストプラクティスを提供していることに気付いていないかもしれません。 ただし、依存関係(サービス)の操作は、コードの管理およびテスト中に直面する可能性のある問題のために面倒な場合があります。

しかし、その解決策もあるので心配はいりません。これは依存性注入と呼ばれます。 これは、XNUMXつ以上の依存関係(またはサービス)を参照によって依存オブジェクトに挿入または渡すことができるソフトウェアデザインパターンです。 依存性注入を使用すると、次のことができます。

  • ユニットテストプロセスを合理化して整理します。
  • git-flowを高速化します。
  • 目的のないモジュール結合は避けてください。

常に非同期コードを使用する

NodeJSは、その非同期性で知られています。 JavaScriptは、コールバック関数(他の関数に引数として渡される関数)を提供します。 これらの関数を使用すると、JavaScriptで非同期動作を記述することもできます。 ただし、生のコールバック(async-awaitなど)を使いすぎると、アプリケーションの制御フローに影響を与え、同期コードに似たエラー処理とセマンティクスを妨害します。 同期コードの問題は、前のコードが完了するまで、他のコードの実行をブロックすることです。

一方、非同期コードを使用すると、コードが詰まることなく、並行して実行できます。 したがって、可能な限り非同期コードを使用する必要があります。それを可能にするために、ES 6(ECMASCRIPT 2015)がPromisesでリリースされました。 これにより、コードの読み取りとテストが容易になり、エラー処理プラットフォームと関数型プログラミングのセマンティクスが向上します。 例を通して、この概念をより明確に理解しましょう。

console.time('timer')
for(var i =0; i<999999; i++){}
console.timeEnd('timer')
// timer: 7.90380859375 ms
console.time('timer')
for(let i =0; i<999999; i++){}
console.timeEnd('timer')
// timer: 3.73779296875 ms

ここでは、1つのコードブロックを実行しています。 3つの関数に2秒かかるとします。 例1でコードを実行するには、XNUMX秒かかります。 一方、例XNUMXでは、​​同じXNUMXつの関数を実行していますが、今回は非同期であり、XNUMX秒近くしかかかりません。 これらは、コードパフォーマンスの向上に役立ち、アプリの作成に大いに役立ちます。

ユニットテストと最終テストを実施する

テストは間違いなくすべてのプロジェクトで重要な段階です。 バグのあるコードはアプリの開発プロセスを遅くし、他の問題も引き起こす可能性があるため、結果だけでなくプロジェクトの全体の流れはテストに依存します。

アプリケーションをテストする最良の方法は、ユニットごとにテストすることです。 単体テストの主な目的は、セクションを選択して分離し、その正確性を検証することです。 ユニットテストは次の場合に役立ちます。

  • コード品質の向上
  • 初期段階でのエラーの検出
  • 開発コストの削減

単体テストは、プログラマーがプロジェクトのさまざまな部分の障害を初期段階で検出するのに役立ちます。 アプリ開発プロセスが完了したら、アプリケーションの最終テストを実行して、アプリケーションを起動する準備ができていることを確認する必要があります。 次のように、確認できることがたくさんあります。

  • アプリを本番モードで実行する
  • Gzip圧縮を有効にする
  • Enginxのようなロードバランサーを使用する
  • PM2にアクセスしてサーバー上のNodeJSアプリケーションを管理する
  • クラスタリングを使用してアプリケーションの複数のインスタンスを作成する
  • express-rate-limiterなどのAPIにレートリミッターを実装する

これらすべてのチェックポイントをテストすると、アプリのパフォーマンスを向上させ、堅牢なNodeJSアプリケーションを作成するのに役立ちます。

アップラッピング

この記事では、より少ない時間と労力でアプリを開発できるNodeJSのトッププラクティスを紹介しました。 優れたアプリ開発プロセスには、このような方法がもっとある可能性がありますが、最も広く使用されている標準的な方法を紹介しようとしました。 これで、NodeJSを使用したアプリの開発について十分に理解できたので、先に進んで知識を実装してください。 NodeJS開発者を雇うこともできます
そして、あなたのビジネスのための驚異的なアプリケーションを手に入れるためにあなたのアプリの実践と概念について話し合ってください。

タグ

ハッカー正午に参加

無料のアカウントを作成して、カスタムの読書体験のロックを解除します。

コインスマート。 BesteBitcoin-ヨーロッパのBörse
ソース:https://hackernoon.com/developing-an-app-with-nodejs-best-practices-to-follow-zby37hw?source = rss

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?