Badanie spowolnień w Biome
Biome ma być szybki. Bardzo szybki. A jednak czasami zdarza się, że nie
udaje nam się dotrzymać tej obietnicy. Najczęściej przyczyną jest konkretny plik
lub zależność, która powoduje problemy. Czasami też przypadkowo zapomnisz zignorować
folder dist/ lub build/. Bez względu na przyczynę, może być trudno znaleźć
co powoduje to spowolnienie, więc ten przewodnik ma pomóc ci to rozgryźć.
Najpierw podstawy
Dział zatytułowany „Najpierw podstawy”Zanim zagłębimy się zbyt daleko, możemy wykonać kilka kroków, aby sprawdzić, czy nasz problem jest spowodowany jednym z następujących:
- Jeśli masz folder
dist/lubbuild/z plikami wyjściowymi lub inne takie foldery z plikami zminifikowanymi, sprawdź, czy ignorowanie ich za pomocąfiles.experimentalScannerIgnoresorazfiles.includesrobi różnicę. - Czy masz włączone reguły projektu? Wiadomo, że
powodują one narzut wydajnościowy, w zamian za bardziej zaawansowaną analizę.
Zobacz też nasz wpis FAQ
na ten temat. Sprawdź, czy wyłączenie ich robi różnicę.
- Jeśli wyłączenie ich pomaga, ale chcesz dowiedzieć się, co konkretnie
spowodowało spowolnienie, pierwszym krokiem może być dodanie
node_modulesdofiles.experimentalScannerIgnores. Czy to pomogło? Świetnie! Ale prawdopodobnie nie chcesz tego tak zostawić, ponieważ informacje o typach z zależności nie będą już dostępne. Możesz dalej dostosowaćfiles.experimentalScannerIgnores, aby ignorować konkretną zależność zamiast całego folderunode_modules, ale prawdopodobnie będziesz chciał czytać dalej, aby dowiedzieć się, którą zależność ignorować…
- Jeśli wyłączenie ich pomaga, ale chcesz dowiedzieć się, co konkretnie
spowodowało spowolnienie, pierwszym krokiem może być dodanie
Jeśli żadne z powyższych nie pomogło, lub jeśli pomogły, ale chcesz zagłębić się dalej, możemy użyć śledzenia, aby zobaczyć, czy jest konkretny plik, który może być winowajcą…
Śledzenie
Dział zatytułowany „Śledzenie”Od wersji 2.0, Biome ma ulepszone możliwości śledzenia, aby pomóc w tym śledztwie. Konkretnie, połączymy następujące argumenty wiersza poleceń:
- Każde polecenie CLI Biome może otrzymać argument
--log-file=<ścieżka>, który zapisze wszystkie komunikaty logów dla tego wywołania do podanej ścieżki zamiast do stdout. - Parametr
--log-level=<poziom>przyjmuje wartośćtracing. Gdy--log-level=tracingjest używany, Biome również wypisuje informacje o czasie z zakresów śledzenia do logu. - Używając
--log-kind=jsonmożemy poprosić Biome o zapisanie logów w formacie JSON.
Jeśli połączymy te trzy argumenty, możemy utworzyć plik logu z wiadomościami JSON zawierającymi wszystkie istotne informacje o czasie dla Biome. Na przykład:
biome lint --log-level=tracing --log-kind=json --log-file=tracing.jsonTo zapisuje plik tracing.json, ale może zawierać dużo danych. Więc użyjemy
jq do filtrowania tych informacji.
Na przykład, jeśli chcesz dowiedzieć się, które ścieżki zajmują najdłużej podczas budowania grafu modułów, możesz użyć następującego polecenia:
cat tracing.json | jq 'select(.span.name == "update_module_graph_internal") | { path: .span.path, time_busy: .["time.busy"], time_idle: .["time.idle"] }' > filtered.jsonTeraz będziesz mieć plik o nazwie filtered.json ze wszystkimi istotnymi czasami,
razem ze ścieżkami używanymi podczas wywołań.
Podobnie, jeśli chcesz dowiedzieć się, które pliki były najwolniejsze do analizy, możesz użyć następującego polecenia:
cat tracing.json | jq '. | select(.span.name == "pull_diagnostics") | { path: .span.path, time_busy: .["time.busy"], time_idle: .["time.idle"] }' > filtered.jsonInne nazwy zakresów, które mogą być interesujące do wyciągnięcia informacji:
format_filemówi ci, jak długo pliki zajmują formatowanie.open_file_internalmówi ci, jak długo pliki zajmują otwieranie, w tym parsowanie. Ma polereason, które również może powiedzieć ci dlaczego plik jest otwierany: przez skaner, zaktualizowany przez obserwator, lub żądanie klienta, które jest zwykle do lintowania lub formatowania. (od Biome 2.1.2)
Copyright (c) 2023-present Biome Developers and Contributors.