Уведомления Dojo dgrid + WebSocket приводят к тому, что приложение перестает отвечать на запросы

В моем приложении я использую OnDemandGridпри поддержке Request + Trackable dstore, чтобы отобразить мои данные пользователю.

Сервер отправляет клиенту уведомления через websocket для добавления новых записей в сетку. Чтобы добавить новые записи в сетку, магазин генерирует событие add, что-то вроде следующего фрагмента кода:

function _emitAddEvent(store, entity) {
    store.emit('add', {
        target: entity,
        id: entity.id
    });
}

Пока здесь все хорошо. Приложение получает новую запись от сервера, которая будет добавлена ​​в сетку, и добавляет ее (без обновления сетки). Проблема в том, что сервер отправляет слишком много уведомлений за небольшой промежуток времени. Хранилище отправляет все события в dgrid, но сетка тратит некоторое время, чтобы отобразить все строки. Поскольку слишком много записей для добавления, приложение перестает отвечать на запросы. Если сервер прекращает отправку данных клиенту, через некоторое время приложение восстанавливает и правильно отображает все строки. Теперь возникает вторая (но незначительная) проблема.

Вторая проблема заключается в том, что после того, как сетка отображает все новые строки, она не уничтожает слишком длинные строки. Я установил farOffRemoval атрибут, но, кажется, обрабатывает только случаи, когда происходит прокрутка и новые данные запрашиваются на сервер. Я хотел бы знать, есть ли обходной путь, который не зависит от прокрутки, чтобы уничтожить узлы, которые находятся слишком далеко от текущей позиции пользователя в сетке.

1 ответ

Решение

Ну, мне удалось закодировать обход первой проблемы. Поскольку приложение перестало отвечать на запросы, потому что клиент за короткий промежуток времени получил много уведомлений, я решил добавить события в очередь и отправлять их максимум по одному в секунду. dojo/throttle вместе с setInterval было достаточно для этого.

Второй вопрос, связанный с farOffRemoval атрибут, я не смог решить. После некоторого тестирования я заметил, что в браузере может быть много DOM-узлов без значительной потери производительности (конечно, это зависит от компьютера пользователя), поэтому я просто оставил сетку нетронутой.

Другие вопросы по тегам