Skip to content

perf(connections): debounce tree object filters and the sidebar connection search (#878) - #976

Merged
ZhuchkaTriplesix merged 1 commit into
devfrom
issue/878-debounce-tree-filter-sidebar-search
Sep 25, 2026
Merged

ZhuchkaTriplesix merged 1 commit into
devfrom
issue/878-debounce-tree-filter-sidebar-search

Conversation

@ZhuchkaTriplesix

Copy link
Copy Markdown
Member

Описание изменений

  • Фильтры групп объектов дерева (PostgreSQL / MySQL / SQLite) и поле «Filter connections…» в сайдбаре вызывали setState на каждый символ, а значит заново фильтровали список и перестраивали всё поддерево.
  • Добавлен FilterDebouncer и kTreeFilterDebounce = 150 мс (как у фильтра сетки). Запрос применяется только после паузы в наборе. Кнопка очистки отменяет отложенное применение и срабатывает сразу; таймеры отменяются в dispose.
  • В сайдбаре иконка поиска и кнопка «×» теперь управляются самим TextEditingController через ValueListenableBuilder, поэтому реагируют на каждый символ без перестройки всей панели, а сам список подстраивается через 150 мс.
  • Списки остаются виртуализированными (itemExtent), менялся только момент применения запроса.
  • Тесты в connection_tree_quick_search_test: FilterDebouncer (выполняется только последнее действие, cancel отменяет), набор в сайдбаре применяется один раз после паузы, очистка сбрасывает фильтр сразу и отложенный ввод не возвращает его. Весь каталог test/features/connections (59 тестов) прогнал локально, проходят.

Не входит

  • Сами группы (_PgObjectGroup и т.п.) приватные и в тест напрямую не попадают, поэтому их дебаунс покрыт тестом самого FilterDebouncer и проверкой в сайдбаре, а не отдельным виджет-тестом дерева.
  • Ограничение listTables / listBrowsableRelations (как в issue).
  • Замера частоты перестроений не делал.

Связанные Issue

Closes #878

…ction search (Closes #878)

The PostgreSQL / MySQL / SQLite object-group filters and the sidebar
'Filter connections...' field called setState on every keystroke, re-filtering
and rebuilding the whole subtree each time.

Add FilterDebouncer (150 ms, the same as the data grid filter bar) and apply the
query only after the user pauses. Clearing cancels a pending update and takes
effect immediately. In the sidebar, the search icon and clear button are driven
by the text controller through ValueListenableBuilders, so they still react to
every keystroke without rebuilding the panel.
@github-actions github-actions Bot added frontend Theme parser epic label: frontend performance Theme parser epic label: performance ui User interface components and widgets connections Database connections, URI parsing, pools labels Sep 25, 2026
@github-actions github-actions Bot added this to the 0.4.18 milestone Sep 25, 2026
@ZhuchkaTriplesix
ZhuchkaTriplesix merged commit 26f71a4 into dev Sep 25, 2026
3 checks passed
@ZhuchkaTriplesix
ZhuchkaTriplesix deleted the issue/878-debounce-tree-filter-sidebar-search branch September 28, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

connections Database connections, URI parsing, pools frontend Theme parser epic label: frontend performance Theme parser epic label: performance ui User interface components and widgets

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant