Производительность NSTableView: основанный на представлениях против основанного на ячейках в 2024 году

Вопрос или проблема

Мой новый проект использует NSTableView для отображения тысяч строк.

После реализации NSView-основанного NSTableView я заметил, что производительность прокрутки слишком низкая, хотя ячейки содержали только простые однострочные NSTextField.

Я попробовал все доступные на тот момент варианты, чтобы это исправить:

  • Реализовал повторное использование ячеек с помощью makeView(withIdentifier:owner:)
  • Установил фиксированную высоту строк
  • Снизил сложность иерархии представлений

Но я все равно не смог найти способ.

Тогда я попробовал NSCell и производительность оказалась отличной.

Поэтому мой вопрос таков:

Приемлемо ли использовать таблицы на основе NSCell в современном разработке для macOS?

Ответ или решение

В 2024 году разработка с использованием NSTableView в macOS всё ещё актуальна, и выбор между представлением на основе NSView и NSCell имеет свои нюансы, особенно при обработке больших объемов данных.

Про Performance: View-Based vs. Cell-Based

  1. Производительность: Вы правильно заметили, что при использовании view-based NSTableView могут возникать проблемы с производительностью, особенно когда речь идет о большом количестве строк. Это связано с тем, что создание и усечение представлений (views) требует больше ресурсов, чем работа с ячейками (cells).

  2. Оптимизация View-Based:

    • Переработка представлений: Использование метода makeView(withIdentifier:owner:) действительно необходимо для оптимизации, однако, если производительность всё равно оставляет желать лучшего, возможно, стоит проверить методы кэширования или создания более легких представлений.
    • Фиксированная высота строк: Это хороший подход для упрощения вычислений высоты ячеек, но вместе с тем необходимо контролировать, чтобы ваши представления не перегружали процессор при отрисовке.
  3. Сложность иерархии представлений: Чем проще иерархия представлений, тем быстрее будет происходить рендеринг. Убедитесь, что у вас минимальная вложенность иерархий представлений.

NSCell-Based Tables

Использование NSCell в современных приложениях macOS остаётся приемлемым, особенно если ваши требования к производительности высоки и ваши ячейки содержат простые элементы, как, например, NSTextField.

  1. Производительность: Как вы и отметили, производительность улучшилась при использовании NSCell. Ячейки в этом случае легче для отрисовки, чем представления, что делает их идеальным выбором для таблиц с большим количеством строк.

  2. Гибкость: При использовании NSCell вы всё равно можете настраивать внешний вид ячеек, однако у вас будут некоторые ограничения по сравнению с view-based подходом. Тем не менее, для простых ячеек это не должно быть критично.

  3. Совместимость: Учитывая, что NSCell используется во многих классических macOS приложениях, его использование по-прежнему вполне допустимо. Apple не отменял поддержку NSCell, и многие разработчики продолжают использовать его для достижения высокой производительности.

Заключение

Чтобы резюмировать, использование NSCell для таблиц в macOS 2024 года не только допустимо, но и иногда необходимо для того, чтобы обеспечить необходимую производительность, особенно в тех случаях, когда вы работаете с тысячами строк. Если ваши ячейки просты, и производительность важнее гибкости, использование NSCell будет оправданным выбором.

Оцените материал
Добавить комментарий

Капча загружается...