Подтвердить что ты не робот

Ko.observableArray() очень медленный для 1000+ <div> элементов

Пожалуйста, посмотрите мой пример jsfiddler.

http://jsfiddle.net/cYYEt/

Если есть другой способ, мы должны быть привязаны/создаем наш массив /etc, который тоже будет работать. Я решил эту проблему, либо используя список, либо пробелы

Спасибо!

JS

var mainViewModel = function () {
    var self = this;

    this.Items = ko.observableArray();

    this.init = function () {
        var itemsArray = [];
        for(var i = 0; i < 1300; i++){
            itemsArray.push("My value is: " + i);
        }
        self.Items(itemsArray );
    };
};

$(function () {
    myApp = new mainViewModel();
    ko.applyBindings(myApp);
    myApp.init();
});​

HTML

<!-- ko foreach: Items -->
    <div data-bind="text: $data"></div>
<!-- /ko -->​
4b9b3361

Ответ 1

Вы можете получить приличное улучшение в Chrome, удалив текстовые узлы, окружающие ваш "шаблон", например: http://jsfiddle.net/rniemeyer/RAfNv/.

<!-- ko foreach: Items --><div data-bind="text: $data"></div><!-- /ko -->

Я думаю, что в какой-то момент мы будем пытаться улучшить это в ядре. Раньше мы смотрели на что-то вроде этого: https://github.com/SteveSanderson/knockout/pull/709, но в конце этого не добавляли никаких изменений.