パフォーマンスの問題を調査する
Biomeは高速であることを目指しています。非常に高速です。 しかし、時にはその約束を果たせないことがあります。多くの場合、原因は特定のファイルや依存関係です。または、dist/やbuild/フォルダを無視し忘れることもあります。原因が何であれ、何が遅延を引き起こしているのかを見つけるのは困難な場合があります。このガイドは、それを特定するのに役立ちます。
深く掘り下げる前に、問題が以下のいずれかによって引き起こされているかどうかを確認するために、いくつかの手順を実行できます:
dist/やbuild/フォルダに出力ファイルがある場合、またはその他の圧縮されたファイルを含むフォルダがある場合、files.includesで!!構文を使用してそれらを無視することで違いがあるかどうかを確認してください。- プロジェクトルールが有効になっていますか?これらは、より高度な分析と引き換えにパフォーマンスオーバーヘッドを引き起こすことが知られています。このトピックに関するFAQエントリも参照してください。無効にすることで違いがあるかどうかを確認してください。
- 無効にすることで改善するが、何が具体的に遅くしているのかを知りたい場合、最初のステップとして
**/node_modulesをfiles.includesに!!構文で追加することができます。 改善しましたか?素晴らしいです!ただし、依存関係からの型情報が利用できなくなるため、このままにしておきたくないでしょう。files.includesをさらに調整して、node_modules/フォルダ全体ではなく、特定の依存関係を無視することもできますが、どの依存関係を無視すべきかを特定するには、おそらく読み続ける必要があります。
- 無効にすることで改善するが、何が具体的に遅くしているのかを知りたい場合、最初のステップとして
上記のいずれも役に立たなかった場合、または役に立ったが、さらに深く掘り下げたい場合は、トレーシングを使用して、原因となっている可能性のある特定のファイルがあるかどうかを確認できます。
トレーシング
Section titled “トレーシング”バージョン2.0以降、Biomeはこの調査を支援するためにトレーシング機能を改善しました。具体的には、以下のコマンドライン引数を組み合わせます:
- すべてのBiome CLIコマンドに
--log-file=<path>引数を渡すことができ、その呼び出しのすべてのログメッセージをstdoutの代わりに指定されたパスに書き込みます。 --log-level=<level>パラメータはtracing値を受け入れます。--log-level=tracingが使用されると、Biomeはトレーシングスパンからのタイミング情報もログに出力します。--log-kind=jsonを使用して、BiomeにログをJSON形式で書き込むように要求できます。
これら3つの引数を組み合わせると、Biomeのすべての関連するタイミング情報を含むJSONメッセージのログファイルを作成できます。例えば:
biome lint --log-level=tracing --log-kind=json --log-file=tracing.jsonこれによりtracing.jsonファイルが書き込まれますが、大量のデータが含まれる可能性があります。そのため、jqを使用してこの情報をフィルタリングします。
例えば、モジュールグラフを構築する際にどのパスが最も時間がかかるかを特定したい場合は、次のコマンドを使用できます:
cat tracing.json | jq 'select(.span.name == "update_module_graph_internal") | { path: .span.path, time_busy: .["time.busy"], time_idle: .["time.idle"] }' > filtered.jsonこれで、filtered.jsonという名前のファイルに、呼び出し中に使用されたパスとともに、すべての関連するタイミング情報が含まれます。
同様に、どのファイルの分析が最も遅かったかを特定したい場合は、次のコマンドを使用できます:
cat tracing.json | jq '. | select(.span.name == "pull_diagnostics") | { path: .span.path, time_busy: .["time.busy"], time_idle: .["time.idle"] }' > filtered.json情報を取得するのに興味深い可能性のある他のスパン名:
format_fileは、ファイルのフォーマットにどのくらい時間がかかるかを示します。open_file_internalは、ファイルのオープン(パースを含む)にどのくらい時間がかかるかを示します。 これにはreasonフィールドもあり、ファイルが開かれる理由も示します:スキャナーによるもの、ウォッチャーによる更新、または通常はリンティングやフォーマットのためのクライアントリクエストです。(Biome 2.1.2以降)
Copyright (c) 2023-present Biome Developers and Contributors.