|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
Доброго времени суток! Собственно хотел спросить совет по работе с большими списками. Вопроса в общем то два: 1. При изменении одного из контролов я перезаписываю содержимое ListBox, списком, полученным из JSON запросом. Удивляет вот что: // Данный код, при количестве данных порядка ~ 2000 записей начинает здорово тормозить. // Смущает то, что если создать гораздо большего объема список, сунуть его в ViewBag.MyList и привязать к контролу, то подобной задержки при открытии страницы нет. // Както возможно еще оптимизировать процесс заливки нового списка? Код: javascript 1. 2. 3. 4. 5. 6.
2. Есть к примеру два списка, один полный, другой с выбранными из левого перекидываем в правый (JS на DblClick по позиции). Мне надо в POST контроллере получить все содержимое списка, а не только выделенные. Лобовое решение - по нажатию кнопки, скриптом, пробегаемся по содержимому и выделяем. Но при больших объемах - заметно и небыстро. Есть ли более быстрый и правильный способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 15:48 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
1) открой для себя autocomplete, typehead или подобное. создание 2к элементов будет заметна в дом дереве, грузи по нужности 2) не понял что ты хочешь.. у тебя полный список уже на бекэнде есть полюбас ..ты ж его шлешь уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 16:53 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
denis_viktorovich// Данный код, при количестве данных порядка ~ 2000 записей начинает здорово тормозить. Серьёзно? А что насчёт людей? Могут они усвоить сразу 2000 записей? Чтобы понять насколько это глупо и неудобно, получи удовольствие от выбора страны в списке, где нет даже банального поиска по первой букве. denis_viktorovich// Смущает то, что если создать гораздо большего объема список, сунуть его в ViewBag.MyList и привязать к контролу, то подобной задержки при открытии страницы нет. Задержка есть, но происходит она вместе с рендерингом страницы. denis_viktorovich// Както возможно еще оптимизировать процесс заливки нового списка? Не вываливать на юзера 2000 записей. Даже 100 это дохрена. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 17:00 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
denis_viktorovich2. Есть к примеру два списка, один полный, другой с выбранными из левого перекидываем в правый (JS на DblClick по позиции). Мне надо в POST контроллере получить все содержимое списка, а не только выделенные. Лобовое решение - по нажатию кнопки, скриптом, пробегаемся по содержимому и выделяем. Но при больших объемах - заметно и небыстро. Есть ли более быстрый и правильный способ? Если никак не уйти от работы с большими списками сразу, придётся мириться с задержками, или заниматься микрооптимизацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 17:02 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
handmadeFromRu, Доброго времени суток. 1. Открыл :-) Уже пробовал по разному. С autocomplete получается удобно, когда надо выбрать один элемент из большого списка (если начинать искать символа с 4-го, иногда правда просят поиск по любой части кода). С Chosen удобно когда не очень много элементов и надо мультиселект (например выбор категории или подразделения). А тут селективность низкая, выбираем категорию и элементов все равно много (т.к. нельзя ограничить например только действующими, надо иметь возможность выбрать историю с начала веков). И надо возможность выделить много элементов сразу, т.е. их например 500, а им надо 450, причем выделение надо снять с не смежных элементов. P.S. Для полного счастья, думаю нужен контрол по типу листбокса но с поиском по содержимому (как этот поиск организован в DropDownList c Chosen), чтобы можно было выделить сразу диапазон элементов, и при этом выделение не слетало бы, как в обычном ListBox-е при неосторожном щелчке мышью, и проделывать поиск + выделение можно было бы несколько раз, не риску снять ранее выделенные элементы. P.P.S Я пробовал уже делать вот как - листбокс + скрытое текстовое поле. При нажатии кнопки в Листбоксе код символа копируется в это поле и отображается в TOOLTIP самого листбокса. При наборе N-символов выполняем запрос по маске %введенное%, при нажатии эскейп - очистка условий поиска. Работает, но не интуитивно понятно. 2. Копирование интерфейса старого FORMS приложения. Два листбокса, при выборе из одного элементы перемещаются в другой. Элементы второго я конечно вижу в post контроллере, но только те из них, у которых установлено св-во selected. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 07:49 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
denis_viktorovich, ну ты не ускоришь рендеринг 2к элементов, хотя может через вирутальное дерево контролов как в реакте к примеру но эт больше пытаться затюнить что есть, а не решить проблему ...ну если у тебя там выделают по 500 элементов что то в ui не так сделано...заколебешься ж по 2. у тебя приходит список выделенных ну все есть ж. на стороне сервака ты можешь получить список того что было, весь список и пара операций по пересечению множеств и даст тебе результат, или я не так понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 08:13 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
handmadeFromRuпо 2. у тебя приходит список выделенных ну все есть ж. на стороне сервака ты можешь получить список того что было, весь список и пара операций по пересечению множеств и даст тебе результат, или я не так понимаю? Не совсем так, выбрали категорию, запросом пере заполнили первый лист бокс (по данной категории), затем какие то позиции перенесли во второй листбокс, затем снова поменяли категорию список перезаполнился, из него еще выбрали. На момент нажатия ОК в листбокс2 куча кодов из разных категорий. Чтобы их увидеть надо пробежаться макросом и поставить свойство Selected, что иной раз не быстро и визуально заметно (как бы пролистывает список). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 16:28 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
hVostt Серьёзно? А что насчёт людей? Могут они усвоить сразу 2000 записей? Чтобы понять насколько это глупо и неудобно, получи удовольствие от выбора страны в списке, где нет даже банального поиска по первой букве. Привыкли, так работало раньше, до перевода на вэб, видимо поэтому так и просят. P.S. Несколько тысяч элементов разбита по нескольким категориям и состояниям. По одной категории бывает довольно много, а списке категорий требуют пункт "ВСЕ", типа если категорию точно не знают и хотят "пробежать список глазками", или реально надо все, кроме нескольких или в autocomplete сделан поиск по не селективному куску кода. P.P.S. Если бы мне самому надо было его юзать, то сделал при выборе варианты: 1. По выбранным категориям и состояниям (с мультиселектом) 2. По списку элементов (по категории и элементу) 3. Блок кроме (где выбираем, что не надо в выборку) hVosttЗадержка есть, но происходит она вместе с рендерингом страницы. Есть понятное дело, но какая то не сопоставимая. Вот если список загнать в ViewBag и привязать к контролу - это одно время, а если те же данные пихать в JS то здорово медленнее, браузер предлагает прибить слишком распоясавшийся скрипт. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 16:29 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
denis_viktorovichПривыкли, так работало раньше, до перевода на вэб, видимо поэтому так и просят. Сделайте пересылку маленькими порциями, чтобы было удобно. Весь мир так работает, никто не грузит на клиента тысячи записей без особых и веских причин. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 18:49 |
|
JS и @HTML.ListBox
|
|||
---|---|---|---|
#18+
denis_viktorovichЕсть понятное дело, но какая то не сопоставимая. Вот если список загнать в ViewBag и привязать к контролу - это одно время, а если те же данные пихать в JS то здорово медленнее, браузер предлагает прибить слишком распоясавшийся скрипт. Ну можете попробовать отправить на клиента не JSON, а готовый кусок HTML, вставите его. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 18:50 |
|
|
start [/forum/topic.php?fid=18&fpage=25&tid=1355433]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 294ms |
total: | 434ms |
0 / 0 |