Я люблю индикаторы погрузки. Особенно с тех пор Лоттье анимации Вышли, я играю с различными видами анимации как индикаторы погрузки. Однако эти индикаторы загрузки часто ставят огромную проблему UX при использовании для отображения «ожидания» для запросов Fetch.
Допустим, у вас есть хороший индикатор погрузки, как этот & веб-страница, которая делает сетевой запрос на получение цитаты дня.
Если вы используете этот индикатор загрузки напрямую, в супер-быстрой подключении, где запрос разрешается в 200 мс, то вы заметите, что индикатор загрузки в основном мигает между старым и новым контентом –
Индикатор загрузки приятно для содержания, который занимает 1000 мс + время отклика. Однако он не подходит для содержания, который занимает очень маленькое время вроде 200 мс. Но содержание, однако, загружено через сеть, что означает для пользователей с быстрым 5 г 🛰 соединение, время отклика будет использоваться 200 мс 🚀, а для пользователей с медленными 3G/2G-соединениями время отклика может быть выше для одного и того же контента ☹️
Чтобы обеспечить оптимальный пользовательский опыт в этом сценарии, нам нужны различные индикаторы загрузки для каждого типа скоростей сети, и мы должны поддерживать отдельные «Загрузка-состояние» Это гарантирует, что мы отображаем правильный индикатор нагрузки.
На копании глубоко в эту тему Ract Team проделал много исследований в Suspense Модуль, который делает оптимистичный рендеринг и не отображает какие-либо индикаторы загрузки, если запрос разрешен быстро!
Я написал резюме моих учащихся в отдельном Tweet Thread который вы также можете прочитать, используя Reader
Для идеального UX для сценария, такого как один в приведенной выше образец кодовой коробки,
- Если запрос разрешится в 200 мс
- Индикатор загрузки не требуется
- Если запрос разрешится в 500 мс
- Никакой индикатор погрузки не требуется до 200 мс.
- Индикатор загрузки появляется при 300 мс (что-то не навязчиво)
- Индикатор загрузки виден до 600 мс (даже если данные извлекаются на 500 мс), чтобы гарантировать, что UI не отображается, как если бы он заикал/мигает для пользователя
- Если запрос разрешится в 1200 мс.
- Следуя над временной шкалой, индикатор загрузки отображается до 600 мс.
- После 1000 мс появляется еще один индикатор загрузки (похоже на пользователь в медленной сети)
- Этот индикатор загрузки останется видимым до 1300 мс (чтобы пользователи могли видеть мигающий экран)
Применение этой логики, попробуйте следующий пример –
В этот раз, в
- Загрузка загрузки 200 мс.
- 300 мс + У нас есть индикатор погрузки, который нежная непрозрачность, которая является обязательно видимой для 300 мс, прежде чем отображать данные
- 1000 мс + У нас есть другой анимированный индикатор загрузки, который также виден для 300 мс, прежде чем отображать данные
На втором примере я построил библиотеку JavaScript – «Загрузка-состояние» что поддерживает состояние загрузки внутри, используя Setimeate И предоставляет простой в использовании API для отображения индикаторов загрузки.
import loader from "loading-state";
loader(
new Promise((resolve, reject) => resolve("cool!")),
{
shortLoading: () => {}, // callback to display first loading indicator
longLoading: () => {}, // callback to display the second indicator
done: (result) => {}, // success callback with the result of the promise
error: (e) => {} // error callback with the thrown error
},
{
busyDelayMs: 300, // how long to wait till displaying first indicator
longBusyDelayMs: 1000, // how long to wait till displaying second indicator
shortIndicatorVisibilityMs: 300, // how long to display first indicator
longIndicatorVisibilityMs: 300, // how long to display second indicator
}
)
С этим мы можем эффективно поддерживать состояние загрузки нашего сетевого запроса и убедиться, что UX не затронут для пользователя, основанного на их скоростях сети!
Оригинал: “https://dev.to/dani_akash_/ux-friendly-loading-indicators-3obd”