Задать вопрос

Angular vs Knockout на больших списках

Выбираю между knockout и angular. В целом возможностей нокаута хватает. Но в проекте предполагается работа с достаточно большими списками (тысячи элементов). Написал небольшой тест, чтобы проверить, как ведут себя обе библиотеки: jsfiddle.net/imbolc/z7bkz/8/embedded/result/

Получается, что на заполнении производительность нокаута нелинейно падает при увеличении списка: 100 элементов ~ 40ms, 300 ~ 200ms, 500 ~ 1000ms, 1000 ~ 9000ms, 2000 ~ 80000ms. Angular ведёт себя намного стабильнее. Возможно я написал некорректный тест, опыта работы с обоими библиотеками почти нет. Прокоментируйте, пожалуйста.
  • Вопрос задан
  • 5421 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Imbolc
@Imbolc Автор вопроса
На stackoverflow подсказали, что этот эффект обусловлен странностью в последней версии Хрома. Решение тут: stackoverflow.com/questions/16520823/knockout-js-is-too-slow-in-filling-observablearray
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@lega
Для Angular, в массиве нужно хранить словари вместо чисел, иначе вместо теста "update" будет "fill", это из-за того, что в простые типы нельзя поместить идентификатор и для ангулара список с числами будет каждый раз как новый, и вместо "update" сначала происходит удаление DOM, а потом "fill".
Поправил тест, для Angular.js улучилось время "updating", так же добавил тест для Angular Light:
jsfiddle.net/lega911/ZUne7
Ответ написан
Комментировать
@lahmatiy
Вот немного допиленный ваш тест, с добавлением нескольких других библиотек: plnkr.co/edit/cTWetiNBorS8P2xcHhgm?p=preview
Ответ написан
Комментировать
@mayorovp
Не по поводу производительности, но все же…
setTimeout(function () {
            callback();
        }, 0);

Что это? Почему нельзя написать setTimeout(callback, 0) или вообще callback()?
Ответ написан
@mayorovp
Выглядит верно. Похоже, что все время тратится на строчке self.items.valueHasMutated(), то есть действительно внутри KnockoutJs. А жаль…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы