Однако я также протестировал это на iPhone X, где всё работает очень плавно и быстро, поэтому, думаю, проблема именно в процессоре. Есть ли шанс улучшить производительность на старых устройствах?
Я скоро протестирую это; я подозреваю, что на старых устройствах, возможно, всё ещё нужна (немного «костыльная») оптимизация производительности, ограничивающая количество элементов в меню до 20, чтобы интерфейс ощущался плавным. Разберусь с этим в ближайшее время.
@Don — просто уточняю, чтобы понять, что именно тестировать: вы замечаете это при открытии/закрытии меню нажатием (на меню и вне меню) или свайпом (удержание и жест свайпа)?
Меню кажется плавным при первом открытии. Думаю, это потому, что элементы панели еще не загружены. При первом открытии сверху появляется спиннер-загрузчик. Мне кажется, это хорошее поведение, и, возможно, стоит всегда использовать спиннер-загрузчик при открытии.
Последующие открытия происходят без анимации. Закрытие работает нестабильно (иногда плавно, иногда с задержками).
Когда меню открыто и я кликаю вне его, кнопки меню обычно подтормаживают. Но они сначала выезжают Возможно, это происходит потому, что вся панель меню использует reverse-row, и при закрытии класс удаляется до того, как панель полностью выедет, после чего возвращается к row?
Редактирование: Это не кнопки панели меню (вкладки), а просто иконки перед уведомлениями. Но задержки обычно возникают именно на этой строке.
Судя по всему, «заикание» здесь вызвано повторным рендерингом заголовков, а не самими анимациями.
Одна вещь, которую я добавил и которая может создавать ощущение новой медлительности, — это анимация выезда (эта анимация была случайно удалена при рефакторинге нашего нового заголовка).
Небольшая задержка (setTimeout) между анимацией и работой, которую выполняют виджеты меню, кажется, значительно улучшает плавность. То есть сама анимация не медленная; я подозреваю, что проблема в работе, связанной с повторным рендерингом заголовков сайта при открытии/закрытии.
Меня на самом деле интересует, не связано ли это с тем, что в Firefox промис окончания анимации срабатывает только после того, как анимация полностью отрисована (я предполагал, что это так при написании исходного изменения). Это может объяснить, почему всё выглядит плавнее, чем в Chrome, тогда как в Chrome пересчёт может начаться после завершения вычислений анимации, но до её отрисовки.