У меня есть следующий сценарий: - приложение с большим количеством предметов. (1mil +) - по каждому пункту в списке можно наблюдать один.Уничтожить наблюдаемые при отписке
Если я создаю наблюдаемые из инициализации приложения, приложение замерзнет, так как требует много обработки и памяти. Решение состоит в том, чтобы создавать их по требованию, поскольку элементы будут отображаться по частям за раз. Это довольно легко сделать.
Мне нужно, чтобы после того, как я отвязал элементы, чтобы показать новую партию, уничтожить наблюдаемые, которые были созданы и больше не используются.
Одним из решений является то, что когда я переключаюсь на новую партию, повторяю старую партию и уничтожаю. Это также довольно легко сделать, но, к сожалению, недостаточно.
Мое приложение разделено на компоненты, каждый из которых может использовать или не использовать элементы из основного пула элементов. Это означает, что я не могу просто искать предыдущие элементы, которые я отсоединяю и просто уничтожаю наблюдаемые, но мне приходится искать все компоненты. Это не хорошо с точки зрения производительности, а также не очень приятно, поскольку компоненты не должны знать друг друга.
Так что мой вопрос. Есть ли какой-либо способ (встроенный или нет) в нокаут, чтобы уничтожить наблюдаемый, как только на нем больше нет подписчиков?
спасибо.
'ko.computed' должен быть вручную удален, потому что он создает новые ссылки на другие наблюдаемые данные, но обычный наблюдаемый должен быть сборкой мусора JS, если больше ссылок на него нет. Неужели я ошибаюсь? –
не очень. ko.computed имеют следующие 2 варианта: disposeWhen и disposeWhenNodeIsRemoved, чтобы избавиться от них. Наблюдения в основном привязаны к модели, поэтому, если вы специально не удаляете их, они не будут собраны. Моя проблема заключается в том, что мне нужно знать, когда нужно распоряжаться наблюдаемыми, что-то вроде disposeWhenNodeIsRemoved будет абсолютно фантастическим, но я не нашел что-то подобное или обратный вызов. –
Является ли ваша «логика создания по требованию» в одном месте или в каждом компоненте? Если вы можете поместить эту логику в одном месте, не могли бы вы также отследить их и отвязать предыдущие? –