Новая панель мобильного меню работает медленно и с задержками на старых устройствах

Привет :waving_hand:

После обновления UX: improve touch, swipe, panning performance on mobile menus by featheredtoast · Pull Request #23775 · discourse/discourse · GitHub панель меню (пользовательская и боковая) стала двигаться гораздо медленнее, чем раньше, на старых мобильных устройствах под управлением Android. Возможно, это связано с тем, что производительности процессора этих устройств недостаточно для плавной анимации.

На моём устройстве Huawei P20 Pro.

Однако я также протестировал это на iPhone X, где всё работает очень плавно и быстро, поэтому, думаю, проблема именно в процессоре. Есть ли шанс улучшить производительность на старых устройствах?

Спасибо :slightly_smiling_face:

6 лайков

Спасибо, @Don, мы посмотрим!

2 лайка

Привет, Дон, спасибо за обратную связь!

Я скоро протестирую это; я подозреваю, что на старых устройствах, возможно, всё ещё нужна (немного «костыльная») оптимизация производительности, ограничивающая количество элементов в меню до 20, чтобы интерфейс ощущался плавным. Разберусь с этим в ближайшее время.

3 лайка

@Don — просто уточняю, чтобы понять, что именно тестировать: вы замечаете это при открытии/закрытии меню нажатием (на меню и вне меню) или свайпом (удержание и жест свайпа)?

2 лайка

Меню кажется плавным при первом открытии. Думаю, это потому, что элементы панели еще не загружены. При первом открытии сверху появляется спиннер-загрузчик. Мне кажется, это хорошее поведение, и, возможно, стоит всегда использовать спиннер-загрузчик при открытии. :thinking:

Последующие открытия происходят без анимации. Закрытие работает нестабильно (иногда плавно, иногда с задержками).

Когда меню открыто и я кликаю вне его, кнопки меню обычно подтормаживают. Но они сначала выезжают :thinking: Возможно, это происходит потому, что вся панель меню использует reverse-row, и при закрытии класс удаляется до того, как панель полностью выедет, после чего возвращается к row?

Редактирование: Это не кнопки панели меню (вкладки), а просто иконки перед уведомлениями. Но задержки обычно возникают именно на этой строке.

При закрытии меню жестом оно кажется плавным.

2 лайка

Обновление: Похоже, в браузере Firefox перемещение меню происходит плавно. Я также протестировал это в Edge, где результат такой же, как в Chrome.

Firefox

Судя по всему, «заикание» здесь вызвано повторным рендерингом заголовков, а не самими анимациями.

Одна вещь, которую я добавил и которая может создавать ощущение новой медлительности, — это анимация выезда (эта анимация была случайно удалена при рефакторинге нашего нового заголовка).

Небольшая задержка (setTimeout) между анимацией и работой, которую выполняют виджеты меню, кажется, значительно улучшает плавность. То есть сама анимация не медленная; я подозреваю, что проблема в работе, связанной с повторным рендерингом заголовков сайта при открытии/закрытии.

Меня на самом деле интересует, не связано ли это с тем, что в Firefox промис окончания анимации срабатывает только после того, как анимация полностью отрисована (я предполагал, что это так при написании исходного изменения). Это может объяснить, почему всё выглядит плавнее, чем в Chrome, тогда как в Chrome пересчёт может начаться после завершения вычислений анимации, но до её отрисовки.


EDIT: Я добавляю паузу с помощью нашего runloop, чтобы создать необходимое пространство перед запуском анимации. Это должно сделать анимацию гораздо более плавной: UX: call discourseLater on menu animations by featheredtoast · Pull Request #24168 · discourse/discourse · GitHub

3 лайка

Ура, огромное спасибо! Отличное замечание! :heart_eyes:

2 лайка