Как сделать виртуальный список Qooxdoo масштабируемым?

Мне нужно показать список данных, по крайней мере, 1 миллион строк (большие данные, машинное обучение). Мне не нужно показывать сразу, удаленная модель таблицы qooxdoo работает нормально, но вместо таблицы я выбираю список в качестве выбора дизайна.

Ниже приведен тест, который я сделал.

//create the model data, 1mil items
var rawData = [];
for (var i = 0; i < 1000000; i++) {
 rawData[i] = "Item No " + i;
}
var model = new qx.data.Array(rawData);

//create the list
var list = new qx.ui.list.List(model);
this.getRoot().add(list);

Я понимаю, что потребуется много времени, чтобы сгенерировать необработанные данные и назначить их в список. Но проблема в том, что после назначения списка сам виртуальный список почти не отвечает.

Прокрутка очень медленная, навигация по стрелке вниз тоже зависает на несколько секунд. Виртуальная инфраструктура Qooxdoo должна отображать только видимые элементы, если я правильно понимаю? Но в приведенном выше тестовом примере это так медленно. Я ожидаю, что будет работать как модель удаленного стола.

Протестировано с последними версиями qooxdoo 4.0.0 и 3.5.1, на стабильной версии Chrome 35.


person Phyo Arkar Lwin    schedule 18.06.2014    source источник


Ответы (1)


Я могу воспроизвести вашу проблему только с исходной версией, а не с версией сборки. Я нашел причину, по которой производительность такая низкая. Во внутреннем методе SingleValueBinding есть проверка во время выполнения, которая оказывает огромное влияние на производительность рендеринга.

Я открыл для этого отчет об ошибке: http://bugzilla.qooxdoo.org/show_bug.cgi?id=8439

Но, как мне грустно, эта проблема возникает только с вашей версией для разработчиков. Так что ваши клиенты не пострадали.

Вы можете отключить проверку, если хотите. Просто удалите блок проверки: https://github.com/qooxdoo/qooxdoo/blob/master/framework/source/class/qx/data/SingleValueBinding.js#L915

Вы также можете загружать данные модели по частям, чтобы улучшить создание модели. Возможно, вы можете загрузить следующую часть, когда пользователь прокрутит список до конца. Вы можете использовать пример, который вы уже видели: бесконечная прокрутка в qooxdoo с виртуальным списком< /а>

person Christian Hagendorn    schedule 20.06.2014
comment
Большое спасибо, я собираюсь протестировать версию списка, который вы предоставили. - person Phyo Arkar Lwin; 20.06.2014
comment
Теперь я понимаю, что для обработки огромных наборов данных привязка данных не идеальна. Просто вручную ввести данные будет лучше, не так ли? - person Phyo Arkar Lwin; 20.06.2014
comment
Да, должна быть возможность обрабатывать огромные наборы данных. Вы должны использовать привязку данных для виртуального списка, но, как мне грустно, в исходной версии есть только ошибка производительности. - person Christian Hagendorn; 24.06.2014