Пакетная обработка
Оптимизируйте производительность, сохраняя изменения формы пакетами вместо сохранения при каждом нажатии клавиши.
Обзор
Пакетная обработка позволяет:
- Уменьшить количество операций записи в IndexedDB
- Улучшить производительность для форм с множеством полей
- Контролировать частоту сохранения в соответствии с вашими потребностями
- Балансировать между безопасностью данных и производительностью
Как это работает
Когда пакетная обработка включена:
- Первое изменение - Сохраняется немедленно (для быстрой обратной связи)
- Последующие изменения - Накапливаются и сохраняются пакетами
- Интервал пакетов - Настраиваемая задержка между пакетными сохранениями
Базовое использование
С useFormAutosave
import { useFormAutosave } from '@form-guardian/react';
function MyForm() {
const { formRef } = useFormAutosave('my-form', {
// Сохранять изменения пакетами каждые 5 секунд
batchSaveInterval: 5000, // миллисекунды
});
return <form ref={formRef}>...</form>;
}
С attachFormAutosave
import { attachFormAutosave } from '@form-guardian/dom';
const autosave = attachFormAutosave({
formId: 'my-form',
root: formElement,
// Сохранять изменения пакетами каждые 3 секунды
batchSaveInterval: 3000,
});
Поведение
Без пакетной обработки (по умолчанию)
// Каждое нажатие клавиши вызывает сохранение (после debounce)
const { formRef } = useFormAutosave('my-form', {
debounceMs: 500, // Ждать 500мс после того, как пользователь перестал печатать
// batchSaveInterval: undefined (отключено)
});
Временная шкала:
- Пользователь печатает "П" → Ждать 500мс → Сохранить
- Пользователь печатает "р" → Ждать 500мс → Сохранить
- Пользователь печатает "и" → Ждать 500мс → Сохранить
- Пользователь печатает "в" → Ждать 500мс → Сохранить
- Пользователь печатает "е" → Ждать 500мс → Сохранить
- Пользователь печатает "т" → Ждать 500мс → Сохранить
Результат: 6 операций сохранения
С пакетной обработкой
const { formRef } = useFormAutosave('my-form', {
debounceMs: 500,
batchSaveInterval: 5000, // 5 секунд
});
Временная шкала:
- Пользователь печатает "П" → Ждать 500мс → Сохранить немедленно (первое изменение)
- Пользователь печатает "р" → Накопить (ждать пакета)
- Пользователь печатает "и" → Накопить
- Пользователь печатает "в" → Накопить
- Пользователь печатает "е" → Накопить
- Пользователь печатает "т" → Накопить
- Через 5 секунд → Сохранить пакет (все накопленные изменения)
Результат: 2 операции сохранения (1 немедленная + 1 пакетная)
Конфигурация
Отключить пакетную обработку
// Пакетная обработка отключена по умолчанию
const { formRef } = useFormAutosave('my-form', {
// batchSaveInterval: undefined (отключено)
});
// Или явно отключить
const { formRef } = useFormAutosave('my-form', {
batchSaveInterval: 0, // Отключено
});
Короткие интервалы (частые сохранения)
// Сохранять каждую секунду (чаще, меньший выигрыш в производительности)
const { formRef } = useFormAutosave('my-form', {
batchSaveInterval: 1000,
});
Случай использования: Формы, где потеря данных критична, но вы все еще хотите использовать пакетную обработку.