Nodejs パフォーマンスのヒント。
JSON 形式の API 応答を処理したり、Web サイトに埋め込まれた JavaScript アセットを操作したりするなど、多くの場合、13 桁の長い数字を頻繁に目にします。おそらく、それが new Date().getTime()
などのコードから生成されたエポック タイムスタンプであることはわかっていますが、人間にはそれがどの日付と時刻を表しているかをすぐには判断できません。Epoch Converter という便利な Web サイトがあり、これを人間が読める形式に簡単に変換できますが、開発者にとっては、Web サイトを開くよりもさらに迅速な方法があります。それは、多くのプログラミング言語に付属している インタラクティブ シェル
を使用することです。
ログ ファイルの解析など、大きなテキスト ファイルを扱う場合、効率とパフォーマンス上の理由から、すべてをメモリに読み込むのではなく、コンテンツを 1 行ずつ読み込み/反復処理することが常に推奨されます。Nodejs では、1 行ずつ読み込む方法は、日常的なユーザーの観点からはハッキーで低レベルすぎるように見えるため、常に面倒でした。ただし、最新バージョンの v18.11.0
にマージされた PR のおかげで、FileHandle.prototype.readLines
が組み込まれ、非常に便利に使用できるようになりました。
Java、Ruby、Python などの他のプログラミング言語には、現在のスレッドの実行を一時停止し、指定された時間後に実行を続行する Thread.sleep()
、sleep
、および time.sleep()
メソッドがあり、ループと一緒に使用すると、たとえば競合状態の問題に対処するのに役立ちます。node.js、および一般的な JavaScript では、シングルスレッド、イベント駆動型、および非同期アーキテクチャの性質上、一時停止して待機する方法はあまり明白ではなく、頻繁に見られるようには見えない場合があります。ただし、特定の状況では wait
と retry
の使用が依然として必要であり、役立つため、nodejs または JavaScript で同様の機能と効果をシミュレートすることができます。
Nodejs では、ネットワーク経由での転送やディスクからの読み取りなどの非テキスト ファイル (画像など) の IO 操作を処理するときに、コンテンツを stream.Readable
として受け取る可能性が高く、バイト サイズや画像のサイズを計算するなど、メモリ内の完全なデータを処理する前に、stream
を buffer
に保存する必要があります。その方法はいくつかあります。
socket.io を v2 から v3 にアップグレード に続き、この投稿では、socket.io
と関連パッケージをこの投稿の執筆時点での最新バージョンにアップグレードすることについて説明します。設定の変更は、redis-adapater
と、今回はクライアント io
をインポートする方法のみのようです (特定のユースケースの場合)。
socket.io と socket.io-redis-adapter や socket.io-redis-emitter などの関連ライブラリは、v3 以降、機能または動作にいくつかの重大な変更があり、v2 から v3 への移行中に問題が発生する可能性があります。この投稿では、実際の経験に基づいて、特定のユースケースで発生した問題とその解決方法をリストします。
最近はバックエンド開発やフロントエンド開発に関係なく、JavaScript でコードを書く機会が増えているので、少なくとも 10 年以上ぶりに JavaScript を真剣に検討してみるべきだと考えました。ここでは、長い間見過ごされてきたこのプログラミング言語を詳しく調べる際に役立つリソースを紹介します。
Node.js でランダムな安全なトークンを素早く生成する方法。
nodenv は、複数の NodeJS バージョンを管理するための優れたツールです。ここでは、クイックリファレンスとして、よく使用されるコマンドの一部をまとめています。