高い Next.js メモリ使用量: 診断方法
高価なビルド、キャッシュの増加、Next.js メモリ リークを区別します。プロセスを測定し、ワークロードを再現し、修正を検証します。
たった 1 つのルートに取り組んでいる間に、プロジェクトには数百のルートが存在する可能性があります。 PRNext 0.1.17 はその違いを利用して、未開封のルートに費やす時間を短縮し、入力が変更されていない作業を再利用します。
有益な問題は、キャッシュがファイルをすぐに返せるかどうかではありません。それは、そのファイルが依然として現在のアプリケーションを表しているかどうかです。開発パイプラインは、依存関係の追跡、生成 ID、およびすべてのショートカットに関する保守的なフォールバック パスを維持します。
要求されたルートのコンパイルには、ブラウザーが必要とするルートとその共有レイアウト、エラー、依存関係インフラストラクチャが含まれます。開いているタブはルートをアクティブのままにします。境界付きの非アクティブなセットにより、プロジェクト全体が無期限に保持されることが回避されます。
ミドルウェア、書き換え、並列またはインターセプト ルートにより、依存関係グラフの予測が困難になる可能性があります。このような場合、PRNext は、どのルートをスキップしても安全かを推測するのではなく、完全なコンパイルを維持します。
たとえば、共有ヘッダーを変更すると、それをインポートする開いているページが更新されますが、無関係なタブは現在のモデルを維持します。ブラウザ カウンタとドキュメント マーカーは、200 を返すリクエストよりも強力なチェックを提供します。これらは、更新によってすでに進行中のインタラクションが保存されているかどうかを示します。
開発変換は、実稼働ビルド入力とは別に保存されます。変換を再利用するには、関連するソースとポリシーが一致する必要があります。最適化は、ファイル名が同じであることだけに依存することはできません。
永続キャッシュは、オプションの作業節約インフラストラクチャです。使用できないエントリまたは無効なエントリはコンパイルに戻ります。これは、動的アプリケーション応答のキャッシュではありません。
開発と運用にはライフサイクルが異なるため、再利用可能な作業は分離されます。再起動では、実行中のアプリケーション プロセスや認証された応答を再利用せずに、有効な変換を再利用できます。構成またはコンパイル ポリシーを変更した場合でも、影響を受ける作業を無効にする必要があります。
サポートされている編集で CSS のみが変更される場合、PRNext は、JavaScript グラフの再構築やアプリケーション ワーカーの再起動を行わずに、不変のスタイルシート アセットを公開します。ブラウザはドキュメントと React 状態を保持できます。
CSS モジュールのエクスポートへの変更は、JavaScript インポートに影響を与える可能性があります。 Sass プロセッサとカスタム プロセッサには、より広範な依存関係がある可能性があります。このような場合は、不完全な更新を公開するのではなく、完全なコンパイラにフォールバックします。
不変の世代は、編集に明確なアセットのアイデンティティも与えます。すでに前の世代を使用しているタブでは、リクエストの下でファイルの内容が変更されるのではなく、ファイルのロードを完了することができます。最適化により、ビルドとそのアセット間の関係を明示的に保ちながら、作業が削減されます。
安全な開発モードでは、新しいコンパイラで完全なルート グラフをコンパイルすることにより、インクリメンタル ビルドの問題を調査します。これにより、互換性のある高速リフレッシュ動作を維持しながら、永続的な変換の再利用が無効になり、ワーカーが事前にウォームアップされません。
これを使用して、同じ編集をより単純なコンパイル パスと比較します。セーフ モードで問題が消えると、焦点を絞って再現してレポートできるようになります。それ自体では、欠陥のある最適化を特定することはできません。ソースの変更、影響を受けるルート、およびビルド診断をそのレポートに保存します。