-
Notifications
You must be signed in to change notification settings - Fork 2
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
base: main
Are you sure you want to change the base?
Perfomance #6
Conversation
Perf: break loop if folder contains all layers
There was a problem hiding this 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", |
There was a problem hiding this comment.
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
// 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)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
question: у меня гит не добавляет кавычек, что я передал в команду, то он и выводит, по одному на строку. Тут точно всё правильно?
There was a problem hiding this comment.
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-рут?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Там гит как-то очень сложно выдаёт в зависимости от входа, я закоммитил фикс, но пока-что вижу что там есть ещё над чем работать. Я позже посмотрю + добавлю тестов
Мой проект это просто монорепа, где много файлов и папок и т.к. каждая папка проверялась на гит игнор, то видимо оно поэтому так долго и проходило |
globby изучу, думаю можно будет на нём сделать |
Я заметил что cli медленно работает на моём большом проекте. Продебажил - это всё было из-за того, что даже если алгоритм находит папку со всеми слоями, то он всё равно ищет дальше в подпапках. Добавил условие, что бы этого избежать.
Плюс, заметил simple-git на прямую имплементацию через консоль и это в 3 раза быстрее чем методы из simple-git. Не знаю почему такая большая разница, но что есть то есть.