Skip to content

enhancement(performance): optimize large SQL result set mapping and DDL rendering #334

Description

@ZhuchkaTriplesix

Описание задачи

Синхронный маппинг больших выборок SQL (до 10 000 строк × 50 колонок) в главном потоке UI и рендеринг объемных DDL/ошибок через SelectableText вызывают заметные фризы интерфейса (UI Jank).

Зачем

  • Обеспечить плавность интерфейса (60 FPS) и мгновенный отклик при открытии больших таблиц, процедур и длинных логов.
  • Исключить блокировку Event Loop при обработке десятков или сотен тысяч ячеек данных.

Предлагаемые изменения

  1. Оптимизация маппинга результатов в *_sql_workspace.dart:
    • При result.length > 1000 переносить преобразование строк сокета (row.map(_cellText).toList()) в фоновый изолят через compute() или использовать ленивый маппинг в виртуальном гриде.
  2. Виртуализация DDL и логов:
    • В MysqlRoutineView и выводе длинных ошибок (ResultsTab) заменить SingleChildScrollView(child: SelectableText(...)) на ListView.builder с разбивкой кода/ошибки по строкам.

Технические требования

  • Оптимизировать цикл форматирования ячеек в lib/features/postgresql/postgres_sql_workspace.dart, mysql_sql_workspace.dart и sqlite_sql_workspace.dart.
  • В lib/features/mysql/mysql_routine_view.dart перевести просмотр DDL на построчный ListView.builder при большом объеме текста.

Место в коде (ориентир)

  • lib/features/postgresql/postgres_sql_workspace.dart
  • lib/features/mysql/mysql_sql_workspace.dart
  • lib/features/mysql/mysql_routine_view.dart
  • lib/features/main_screen/results_tab.dart

Acceptance Criteria

  • Выборка на 10 000 строк не блокирует UI-анимации (нет фриза интерфейса).
  • Процедура MySQL с DDL на 2000 строк открывается и прокручивается без просадок FPS.

Scope

  • Scope: desktop
  • Component: Performance / Rendering
  • Kind: enhancement

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions