Перейти к основному содержимому

Та половина Velocity, которую пользователь чувствует. Ничто из этого не ускоряет сервер.

Оптимистичная мутация

Обе колонки говорят с одним и тем же симулированным сервером. Одна его ждёт, другая применяет намерение сразу и сверяется позже.

Наивно

Блокирует на 500 мс при каждом клике.

Velocity

Применяет сразу; то же подтверждение через 500 мс приходит следом.

Только для обратимых и предсказуемых действий. Платежи, удаления и изменения прав никогда не бывают оптимистичными: откат, возвращающий право, которого у пользователя не было, хуже ожидания.

Предзагрузка по намерению

Шесть уровней спекуляции поверх собственных триггеров SvelteKit. Атрибуты ниже прочитаны из модуля, а не перепечатаны.

НамерениеКодДанныеДля чего
noneoffoffДорогие, редко используемые или изменяющие ссылки.
codeviewportoffДорогой маршрут: прогреть чанк, не тратя ничего на сервере.
datahoverhoverОбычный случай, совпадающий с общим для приложения hover.
code-dataviewporttapСсылки с высокой вероятностью перехода: чанк заранее, данные по нажатию.
idleoffoffУправляется preloadOnIdle после того, как страница стала интерактивной, а не атрибутом.

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

Виртуализированный рендеринг

Длинный список должен стоить как область просмотра, а не как объём данных. Переключите число строк и посмотрите, что остаётся в DOM.

10000 строк в данных, примерно 19 в DOM.

Только одинаковая высота строк, и это намеренно: переменная высота требует измерений и таблицы смещений, а каждое из этого — источник скачков прокрутки. Стрелки, Page Up/Down, Home и End двигают перемещаемое выделение — строк, по которым можно было бы пройти табом, по большей части не существует.

Думаете, этот паттерн можно сделать лучше? Расскажите как.

Оставить отзыв