Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Производительность knockout при большом количестве computable-свойств (https://javascript.ru/forum/library-toolkit-framework/53033-proizvoditelnost-knockout-pri-bolshom-kolichestve-computable-svojjstv.html)

Riim 18.01.2015 15:16

Производительность knockout при большом количестве computable-свойств
 
Вложений: 1
Всем привет!

Вот примерчик: http://jsfiddle.net/4L30bknx/1/ .
Там генерируется сетка зависимых полей, в каждом слое сетки 4 поля, в каждом следующем слое поля зависят от полей предыдущего слоя как-бы наискосок, получается что-то вроде крестиков (см. прикреплённый рисунок). "var i = 20" - это число слоёв. Дальше замеряется начальное время и в начале сетки меняются все четыре ячейки. Т. е. как бы замеряем время за которое сигнал пройдёт до конца сетки. Так вот проблема в том, что при изменении числа слоёв, производительность меняется явно не линейно: при 20 слоях - 200мс, при 24 - 1200, при 28 - комп зависает навечно. Реально ли как то избавиться от этого? Пробовал всякое типа такого: http://knockoutjs.com/documentation/...bservable.html , но толку нет (( .

SV0L0CH 20.01.2015 05:35

Тут нокаут не поможет. Нужен другой подход к вычислениям зависимых значений. Не городить зависимости а при каждом изменении начального значения вызывать функцию рекурсивного пересчёта всех остальных значений. А чтобы избежать повторных вычислений надо отсортировать поля по порядку вычислений. Тогда и зависимость будет линейной.
Или это просто эксперименты над нокаутом?


Часовой пояс GMT +3, время: 08:19.