2012-02-23 5 views
1

Некоторое время назад я спросил this question о том, как перенести обновления на ko.observableArray при выполнении обновления партии, и ответ был обновить обернутый массив, а затем вызвать обновления с valueHasMutated вызова ,Отсрочка зависимостей при загрузке данных с помощью knockoutjs, скалярной версии

Есть ли эквивалентный подход для отсрочки обновлений до ko.observable()? Я нахожу много времени, потраченное на обновление и повторное обновление зависимостей, когда я обновляю кучу данных. Есть ли хороший образец для пакетной обработки таких обновлений?

Gene

ответ

7

Пара мыслей в этой области:

  • есть плагин, который делает связанные обновления более эффективным: https://github.com/mbest/knockout-deferred-updates. Автор Майкл Бест теперь участвует в проекте KO и помогает нам улучшить производительность. Этот плагин в конечном итоге может быть свернут в ядро ​​KO в той или иной форме. Вы должны попробовать этот плагин и посмотреть, как ваше приложение работает с ним, так как оно даст нам больше доказательств необходимости этих изменений.

  • другой метод был бы похож на то, что я написал некоторое время назад here. В основном, ваши свойства ko.computed имеют дополнительную зависимость от наблюдаемого, что вы можете включать и выключать. Когда он будет включен, ko.computed выполнит фактическую оценку (которая потенциально может создать много зависимостей). Когда он выключен, он просто вернет самый последний результат и отбросит все его зависимости, отличные от флага. Когда вы снова включите его, он снова будет переоценен. Во время тяжелых обновлений вы можете сделать паузу, пока обновления не будут завершены.

+0

спасибо! В ближайшее время вы проведете обе возможности и откройте отчет. –

+0

Я смог увидеть примерно 10-кратное сокращение времени обработки, удалив ненужные сортировки и другие вычисления с использованием отложенного плагина обновления, но некоторые вещи немного неясны в документации. Одна из проблем, с которыми я сталкиваюсь, - это выяснить, как применять переменные processImmediate к переменным 'ko.computed', используемым моими привязками. –

+0

Не стесняйтесь публиковать вопрос/вопрос о плагине. Я знаю, что Майкл определенно ищет обратную связь и будет рад помочь вам разобраться в вашем сценарии. –