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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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