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

Regarding files highlighting masks: use regexps instead of globs? #2170

Open
spnethw opened this issue Apr 16, 2024 · 7 comments
Open

Regarding files highlighting masks: use regexps instead of globs? #2170

spnethw opened this issue Apr 16, 2024 · 7 comments

Comments

@spnethw
Copy link
Contributor

spnethw commented Apr 16, 2024

Уже упоминал об этой проблеме в #2029.
Вопрос снова возник в связи с добавлением большого количества новых масок в подсветку.
Может быть, стоит сделать их регэкспами по умолчанию?

У себя я, например, делаю примерно так:
/^.*\.(?:sh|py|pl|cmd|exe|bat|com)$/i

Едва ли не половина файлов, с которыми сталкиваюсь, имеет расширения в верхнем регистре: .MP3, .FLAC, .DOCX, .EXE, .ZIP и т.д. Естественно, они не подсвечиваются.

изображение

@elfmz
Copy link
Owner

elfmz commented Apr 16, 2024

Регэкспы долго парсятся, когда открываешь директорию с 100500 (в буквальном смысле) файлов это будет ботлнек, хотя опционально можно конечно
С регистронезависимым сравнением вопрос открыт, опция будет, когда нибудь...

@spnethw
Copy link
Contributor Author

spnethw commented Apr 18, 2024

Регэкспы долго парсятся, когда открываешь директорию с 100500 (в буквальном смысле) файлов это будет ботлнек, хотя опционально можно конечно С регистронезависимым сравнением вопрос открыт, опция будет, когда нибудь...

Не поленился, набросал генератор рандомных имён файлов с заданными расширениями и провёл замеры.
У меня результаты получились такие.

  1. 1 млн. файлов в директории, имена рандомные [A-Za-z0-9\s]{1,20}, расширения из текущего списка подсветки, половина в верхнем, половина в нижнем регистре.
    Среднее время от входа в директорию до отображения содержимого при использовании классических масок 10.28 сек, при использовании регэкспов 10.59 сек. +3%

  2. 1 млн. файлов в директории, имена рандомные [A-Za-z0-9\s], расширения из текущего списка подсветки, половина в верхнем, половина в нижнем регистре, общая длина имени файла от 1 до 255 символов.
    Среднее время от входа в директорию до отображения содержимого при использовании классических масок 18 сек, при использовании регэкспов 21 сек. +18%

  3. 1 млн. файлов в директории, имена рандомные [A-Za-z0-9\s], расширения из текущего списка подсветки, половина в верхнем, половина в нижнем регистре, общая длина имени файла 255 символов.
    Среднее время от входа в директорию до отображения содержимого при использовании классических масок 23 сек, при использовании регэкспов 32 сек. +39%

В целом, не такая уж и большая плата за правильную раскраску, имхо.
Даже при самом неблагоприятном сценарии (255 символов каждое имя файла) падение скорости <40%.
А среднем по больнице получается около 18%.

@akruphi
Copy link
Contributor

akruphi commented Apr 18, 2024

Немного слабодвижущаяся тема про far2l на разных embedded (https://github.com/spvkgn/far2l-openwrt , https://github.com/spvkgn/far2l-termux и прочая экзотика). Так вот там regexps будет критично тормозить. Моё мнение - надо кодить галочку "регистронезависимое сравнение" и использовать по дефолту её.

@shmuz
Copy link
Contributor

shmuz commented Apr 18, 2024

В far2m маски файлов для раскраски являются case insensitive (в большинстве случаев это то что нужно).
Если у пользователя есть какие то особые файлы, где это не годится - поставит регексп.

@spnethw
Copy link
Contributor Author

spnethw commented Apr 18, 2024

Может, тогда малой кровью можно это решение перетащить из far2m?

@spnethw
Copy link
Contributor Author

spnethw commented Apr 18, 2024

АПДЕЙТ.
Не обратил внимания, что замеры проводил на debug-сборке far2l, перезамерил в тех же условиях на release-версии.
Ситуация в корне изменилась.
В 1 и 2 случае время при использовании масок и при использовании регэкспов стало примерно одинаковым, в рамках погрешности.

В 3 случае (1 млн. файлов с именами 255 символов) — процессинг масок стал даже дольше, чем регэкспов (10 секунд vs 8 секунд).
Такие дела.

@spnethw
Copy link
Contributor Author

spnethw commented Apr 19, 2024

Провёл ещё один тест.

Увеличил кол-во файлов в директории до: 1.5 млн.
Общая длина каждого имени файла, включая расширение: 255 символов.
Имена файлов: рандомные из набора символов [A-Za-z0-9\s] и [:punct:], за вычетом прямого слэша.
Проверялось на: расширениях, предлагаемых для раскраски по дефолту в текущей версии (и коммите) far2l.

После нескольких замеров среднее время от входа в директорию до отображения содержимого:
при использовании масок16 сек.,
при использовании регэкспов15 сек.

far2l собирался в release-версию.

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

No branches or pull requests

4 participants