1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
||||||||||||||||
1 | ||||||||||||||||
Оптимизация вывода большого (более 7000) количества записей на странице13.02.2020, 09:09. Показов 4293. Ответов 22
Метки нет (Все метки)
Здравствуйте.
Прошу совета, как сделать более оптимальным решение. Имеется справочник КБК. Модель:
Планировал сделать следующим образом - на странице выводится в компактном виде список КБК из справочника SprKBKBudgetRevenues, возле каждой записи кнопка "Ввести" по которой данныая запись записывается в таблицу DataBudgetRevenues. Сейчас не могу для себя определиться как выводить данные на страницу? На данный момент реализовано в виде двух циклов первый для вывода в таблицу на странице записей из DataBudgetRevenues, ниже второй цикл для вывода записей из справочника SprKBKBudgetRevenues. Основная проблема в том, что в справочнике более 7500 записей. Общий вес страницы более 3,5 Мб. Поэтому загрузка происходит долго и медленно. Функционально все работает так как мне нужно, но явно не оптимально. Хотел бы услышать любые советы по тому, как можно было бы оптимизировать вывод данных. Вот так вывожу в HTML
0
|
13.02.2020, 09:09 | |
Ответы с готовыми решениями:
22
Оптимизация большого количества NPC на карте Оптимизация обработки большого количества объектов Оптимизация большого количества пользовательских элементов управления Оптимизация хранения большого количества объектов в Dictionary |
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
13.02.2020, 09:30 | 2 |
постраничный вывод
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
13.02.2020, 10:28 [ТС] | 3 |
На уровне запроса к БД? Тогда поиск по таблице не будет работать, тот который сейчас реализован, придется свой писать на JS, а я в нем ни как... Только начал смотреть "AJAX-запросы с помощью jQuery" на METANIT.COM
Есть вариант подсказать такой поиск по модели SprKBKBudgetRevenues где поиск только по полям CODE и NAME. Или ссылку на stackoverflow.com
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
13.02.2020, 10:42 | 4 |
Кто такое сказал?
Все работает нормально, если все нормально написано, а не костылями на велосипедах. В контроллере получаешь данные для страничного вывода и поиска, проводишь выборку и отдаешь ее в представление. Ничего сложного.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
13.02.2020, 10:50 [ТС] | 5 |
Я говорю. Сейчас у меня поиск реализован библиотекой шаблона и ведется по данным таблицы уже загруженной на страницу без обращения к БД. Ну вот такой шаблон.
Согласен - сделать в контролере выборку ограниченного числа записей из БД путем запроса и последующий вывод на страницу - вообще не проблема. Но тогда нужно по идее организовать возможность поиска записи в БД по двум полям силами JS. А я в JS вообще ни как - только начал изучать. Поэтому и спрашиваю - есть возможность дать ссылку на пример или показать здесь?
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
13.02.2020, 11:34 | 6 |
1. Учи JS. Но работать в MVC с JS не очень интересно.
2. Переделай на постраничный вывод через контроллер. Я думаю так будет лучше и быстрее, не надо будет насиловать БД выгрузкой толстых запросов. Примеры, ссылки и пр. я не даю принципиально. Пока сам не научишься - будешь все время спрашивать. А если работать по методу Ctrl+C => Ctrl+V, но ничему не научишься
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
13.02.2020, 11:37 [ТС] | 7 |
Ну видимо ссылку на урок тоже как копипаста воспринимаешь? )))
В любом случае, спасибо. Если не разберусь с поиском, то реализую постарничку
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
||||||
13.02.2020, 13:26 | 8 | |||||
Ссылку на урок чего? Постраничного вывода со стороны сервера? Или клиента? Если сервера, то смотри мое предыдущее сообщение п.2. Если что-то непонятно или не получается, выкладываешь код - кто-то да поможет. Если клиента, то смотри п.1 Пока ты сам не начнешь уверенно работать с JS, выкидывать тебе какой-то рабочий код нету смысла, потому что ты его просто скопируешь и следующий твой вопрос будет: памагитя люди добрые, сами мы не местные, я скопировал и ничего не заработало. А все потому, что ты его просто не понимаешь. Вот кусок кода для поля фильтра по которому идет фильтрация полей таблицы с постраничным выводом.
1. это ангуляр, в частности тут реактивная форма 2. filter: FormContol;
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
13.02.2020, 13:50 [ТС] | 9 |
Конечно же нет.
Я не прошу рабочий код. И даже если будет рабочий код, то я буду сидеть и разбираться как именно он работает. На другой странице у меня будет другой запрос, так что все равно придется разбираться. Спасибо, но мне не столько нужен наверное постраничный вывод - этот момент я вроде уже решил, по крайней мере тестирую и пока все работает как надо. Я решил написать свою функцию поиска данных в таблице, сейчас мне кажется этот вариант будет более востребован пользователю, чем постраничный поиск. Там все равно дофига страниц появляется. Если выводить даже по 10 записей на странице = 758 страниц. Ни кто так искать не захочет. С коллегами обсудил - проще сделать функцию поиска данных в таблице БД по коду или названию. Поэтому сейчас курю https://metanit.com/sharp/mvc5/10.3.php и далее по разделу. На сию у меня пока не проходит сам запрос к БД. Пытаюсь понять где накосячил.
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
13.02.2020, 14:54 | 10 |
читаем выше...
теперь объясняю. Пользователь дальше 2-й страницы не пойдет. На вторую по статистике 5% переходят. Но постраничный вывод чем хорош - размер: Ты не нагружаешь канал лишними данными. Ты работаешь с MVC. У тебя 7000 записей. Что это значит: контроллер забирает 7000 записей и в разметке делает 7000 итераций по foreach. А теперь, на сайт заходят 100 пользователей, ты представляешь какая это нагрузка на сервер? Поэтому я сразу и сказал про постраничный вывод через контроллер. Контроллер получает данные, делает выборку, выбирает первую страницу и отдает представление. Все. Есть поля фильтрации? их можно передать в контроллер. Есть допольнительные параметры для поиска - тоже самое. Надо вторую страницу - есть кнопки пагинатора. Но это хорошо, если оптимизировать сайт под SEO. При этом все фильтра для сортировки, пагинация и прочая муть легко пишутся в параметрах запроса адресной строки и тогда при нажатии кнопки "Назад" в браузере ты переходишь на предыдущий результат поиска. С моей точки зрения для MVC это самый нормальный вариант. Далее, если хочешь больше красоты, то надо делать через JS. Но в MVC такая работа - это костыли на велосипедах. Объясняю почему. Контроллер должен отдавать partial view для таблицы, а на странице через ajax ты их будешь загружать. Для этого надо писать отдельный api контроллер (это если по феншую), данные по фильтрации и пагинации хранить в JS. Да, все будет красиво и плавненько показываться, и даже нагрузка на сервер станет меньше, но есть одно маленькое НО. Ты сразу забываешь про SEO. При нажатии кнопки "Назад" ты уходишь назад. А для регионов с хреновым интернетом - это важный аспект. И самый главный минус - эти вот красивые танцы с бубнами с аяксом, jquery и прочими вещами намного быстрее и лучше делаются, используя не MVC, а JS-фреймворки. Причем разработка идет быстрее и на бэкенде и на фронтенде. При этом, нельзя даже сказать, что SEO такого сайта рухнет, а MVC + ajax - это будет 100%
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
||||||
13.02.2020, 15:28 [ТС] | 11 | |||||
Блин, есть вариант подсказать ссылкой на инструкцию как подключить Аякс к проекту? Описание с Метанит не подходит. С https://professorweb.ru/ тоже. У меня нет в проекте файла WebConfig. При подключении в NuGet пакетов не создается никаких папок Script.
Вот эта строчка:
Я использую проект MVC с Core 3.0. Может тут какой то другой способ подключения Аякса? Добавлено через 6 минут СЕО как раз беспокоит меньше всего - это узкоспециализированный продукт под мою работу. СЕО не будет от слова совсем. Аналогично с поиском. Грубо говоря у меня справочник позиций, которые использует специалист. Он должен их ввести. Я хочу облегчить ему работу, чтобы он вводил не вручную из бумажного справочника, а выбирал из электронного. Поэтому искать он будет. Но заставлять его лапатить 750+ страниц - это издевательство над сотрудником. Хм... Сделать на кнопку поиск загрузку записей, с использованием фильтра? Как вариант. Тогда сейчас так и попробую. Спасибо! Но все же хотелось бы попробовать с Аяксом - поиск через JS запрос
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
13.02.2020, 15:46 | 12 |
Забудь про ajax. У тебя в руках пулемет, а ты тянешься за лопатой.
а никак по другому, иначе заколебешься. У core проектов другая структура, там тоже можно все подключить, но немного по другому. Если не сильно жмет, то доделаю совою работу и может чего накалякаю как шаблон. Добавлено через 7 минут по крайней мере на том же метаните вполне нормальное пособие есть по кору https://metanit.com/sharp/aspnet5/
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|||||||||||
13.02.2020, 16:00 [ТС] | 13 | ||||||||||
На метаните библиотека знаний на моё ИМХО самое лучшая. Одна проблема - много всего. ) И основная проблема для меня - core. Структуры очень сильно отличаются.
Не жмет. Но если есть вариант - к примеру есть вариант скинуть и ссылки с метанита по теме. Хочу почитать. Уже заколебался. Но про Аякс везде пишут, как за самое классное решение. Но мне запросами лучше. Буду ждать пример, а сам попробую зафигачить запрос с фильтрами. Вот кстати SQL скрипты для создания таблиц в БД. Вдруг пригодятся. Единственное - там внешние ключи не все нужны. Но не нужные и не выполняться, поэтому не стал убирать.
0
|
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,926
|
|
13.02.2020, 20:09 | 14 |
Уф, так вы объедините два действия на сервере - сначала отфильтруйте, потом нарезайте на страницы.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
14.02.2020, 09:56 [ТС] | 15 |
Проект постоянно обсуждается с коллегами, изначально думали выводить справочник в виде таблицы со всеми записями с постраничной нарезкой. Я так и сделал. Была одна проблема- очень долгая загрузка страницы. Сюда обратился по вопросу оптимизации.
Пока тут общались - спецы потестировали, постраничный вывод не очень комфортен и все равно затратен по времени. Сейчас пилю вывод основных разделов на одной странице (он маленький) и делаю поиск по коду и названию. Меня @yurickas убедил, что лучше реализовать поиск, чем насиловать сервер большой выборкой. Если кто столкнется с похожей проблемой - я остановился на https://dotnet.today/ru/aspnet... earch.html В моем случае это более оптимальное решение, т.к. позволяет снизить количество выводимых в запросе строк до вменяемых размеров. Т.к. я ввожу ограничение на количество введенных в поисковую строку символов (через длинну в символах поискового запроса). Но спс за совет )
0
|
3654 / 2567 / 717
Регистрация: 02.08.2011
Сообщений: 6,926
|
|
14.02.2020, 10:27 | 16 |
Значит он у вас криво реализован, так как у всех постраничный вывод - отличное решение для данных любого размера, а для ваших данных размером всего в 7000 он затратен по времени.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
14.02.2020, 11:06 [ТС] | 17 |
Затратен не выводом на экран, а временем поиска нужной позиции специалистом. Само собой разумеется, что я сравниваю время на 1) вывод всех 7000 записей и последующий поиск нужной позиции 2) постраничный вывод части позиций и их перебор специалистом 3) вывод ограниченного числа позиций путем выборки по поисковому полю
В моем случае третий вариант оказался самым удобным для спецов и самым быстрым по времени заполнения документа в итоге. А коряво или красиво - это не для большого круга пользователей, тут важна эффективность и удобство работы. Я облегчаю работу, а не на выставку работу готовлю. Работает без сбоев, обертки и защиты от дурака сделаны, удобно, время и силы экономит. Что еще нужно для счастья?
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
14.02.2020, 17:20 | 18 |
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
15.02.2020, 20:31 [ТС] | 19 |
Примерно так и сделал. Сверху все поля для поиска и перехода далее. Ниже список отобранных значений (постранично) ниже постранично справочник значений, которые можно ввести в виде спика разделов (по умолчанию). Все получилось вполне компактно и удобно.
Спасибо огромное за помощь. Реализовал без JS, все на MVC. ) Кстати и отклик страниц быстрый и вес страницы небольшой.
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
18.02.2020, 15:02 | 20 |
1
|
18.02.2020, 15:02 | |
18.02.2020, 15:02 | |
Помогаю со студенческими работами здесь
20
Оптимизация insert в таблицу большого числа строк (100000 и более) UPDATE большого количества записей Поиск большого количества записей Ускорение отображения большого количества записей. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |