Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perfomance #6

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Perfomance #6

wants to merge 2 commits into from

Conversation

AgentRBY
Copy link
Contributor

Я заметил что cli медленно работает на моём большом проекте. Продебажил - это всё было из-за того, что даже если алгоритм находит папку со всеми слоями, то он всё равно ищет дальше в подпапках. Добавил условие, что бы этого избежать.

Плюс, заметил simple-git на прямую имплементацию через консоль и это в 3 раза быстрее чем методы из simple-git. Не знаю почему такая большая разница, но что есть то есть.

Perf: break loop if folder contains all layers
Copy link
Member

@illright illright left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет, спасибо за исследование и качественный фикс!

Мне вот только кажется, что не во всех проектах могут быть папки со всеми слоями сразу, а в каких-то (теоретически) может быть несколько таких рутов. Из-за второй проблемы, наверное, стоит немного подрезать этот фикс производительности, но можно сделать так, что если в какой-то папке есть все слои, то внутрь уже смотреть не будем, а по другим папкам в проекте все равно пройдемся. А насчет первой проблемы — возможно, вместо подобной эвристики стоит подумать, как ещё можно оптимизировать поиск.

Сейчас посмотрел на наш алгоритм и погуглил немного — осознал, что то, что мы делаем — это просто глоб-поиск в ФС, а эту задачу уже решали другие, и намного эффективнее. Погуглил еще, и нашел globby — основан на fast-glob (говорят, самая быстрая либа из существующих для этой цели), но еще и с авто-поддержкой гит-игнора. Какая прелесть. Может, затащим её?

Олсо, очень уж интересно, что у тебя за проект такой, где заметно ощущается дроп производительности. Есть ли у тебя способ как-то передать файловую структуру проекта, зафейкав все незначительные для наших целей имена файлов/папок?

@@ -18,7 +18,7 @@
"dependencies": {
"commander": "^11.1.0",
"enquirer": "^2.4.1",
"simple-git": "^3.21.0",
"exec-sh": "^0.4.0",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: не слышал об этой библиотеке раньше, и кажется, она заброшена

suggestion: давай возьмем вместо нее execa, намного более известную и поддерживаемую

src/git-utils.ts Outdated
Comment on lines 26 to 30
// Git check-ignore for absolute path return path in double quotes, so we need remove `"` from start and end, and normalize path
return stdout
.trim()
.split("\n")
.map((folder) => folder.slice(1, -1));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: у меня гит не добавляет кавычек, что я передал в команду, то он и выводит, по одному на строку. Тут точно всё правильно?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я тут осознал, что в интеграционных тестах это не очень хорошо проверяется, а только так мы можем быть полностью уверены, что всё верно. Можешь, пожалуйста, добавить тест в integration-tests/root-detection.spec.ts, где в какой-то кастомной папке (не dist), игнорированной гитом, лежит более подходящий FSD-рут?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Там гит как-то очень сложно выдаёт в зависимости от входа, я закоммитил фикс, но пока-что вижу что там есть ещё над чем работать. Я позже посмотрю + добавлю тестов

@AgentRBY
Copy link
Contributor Author

Мой проект это просто монорепа, где много файлов и папок и т.к. каждая папка проверялась на гит игнор, то видимо оно поэтому так долго и проходило

@AgentRBY
Copy link
Contributor Author

globby изучу, думаю можно будет на нём сделать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants