2014-10-01 3 views
0

привет, я работаю в проекте spring mvc с использованием thymeleaf, и у меня есть метод, который выполняет очень сложный запрос, который принимает 7 seconds, чтобы вернуть 1500 строк, мне нужно заполнить таблицу с этими данными, использующими тимелеаф, но при этом слишком много времени заполняет таблицу, для заполнения таблицы и отображения веб-страницы требуется 1 мин, поэтому загрузка страницы занимает 1 мин, есть способ заполнить таблицу, когда у вас есть много данных, не занимая слишком много времени?заполнить таблицу тимелеаном с очень большими регистрами или данными

Я привык думать, что загрузка слишком много времени была из-за того, что мой метод возвращает список объектов, и мне нужно, чтобы этот список объектов был привязан к моему правильному объекту POJO, поэтому мне нужно зацикливать список и бросить каждый объект,

, но его не так, потому что я попробовать следующие тесты

1) я стараюсь печатать объекты списков в простом TextArea без способа литья и напечатанного мне все объекты, потребовалось 9 secs, чтобы показать веб-страницу но вам нужно вынуть 7 секунд, которые взяли запрос, чтобы привести данные

напечатанное как 1000 объектов, как это в моем TEXTAREA:

[Ljava.lang.Object; @ e9548 [Ljava.lang.Object; @ e9548 .....

2) я попытайтесь распечатать список в простой TextArea с моим методом, который бросает каждый объект в мои объекты POJO, и потребовалось 10 secs почти столько же времени, сколько потребовалось, когда я напечатал список необработанных объектов без моего метода литья.

напечатано как 1000 объектов, подобных этому в мой textArea: [email protected], [email protected], [email protected], [email protected]

3) вот почему я считаю, что метод, который использует тимелаф для заполнения таблицы есть неисправность веб-страница, принимая почти 1 min to load, еще потому, когда я заселить свою таблицу, используя этот код

<table> 
    <tbody> 
      <tr th:each="nodeInfo : ${listOfPojos}"> 

              <td th:text="${nodeInfo.name}"></td> 

              <td th:text="${nodeInfo.lastName}"></td> 
     </tr> 



    </tbody> 
</table> 

что th:each, которые должны iteare 1500 регистров, которые находятся в моем listOfPojos и напечатать значение я считаю, почему занимает слишком много времени, для того чтобы показать мою веб-страницу, когда я поставил этот код, требуется больше времени, поэтому я хотел спросить, есть ли другой способ заполнить мою таблицу, используя этот список из 1500 объектов pojos, не принимая всю эту минуту, чтобы показать страницу.

+0

У нас точно такая же проблема несколько дней назад, но мы, наконец, решили переключиться на вызовы AJAX, Thymleaf не очень хорош, когда вы используете th: каждый, я надеюсь, что они сделают некоторые улучшения в следующем отношении , Наша страница теперь загружается без заполнения этого большого списка на стороне сервера, все происходит на стороне клиента. –

+0

привет, вы можете помочь мне или указать учебник или как вы это сделали, когда вы говорите на стороне клина, это означает что у вас есть сценарий 'javaScript' на вашей html-странице, заполняющей таблицу? если это так, как вы получаете список со всеми pojos? в моем случае «ListOfPersons» becasue я получаю этот список от контроллера вроде этого: 'model.addAttribute (" listOfPOJOs ", myList_that_i_get_from_a_method);' – stackUser2000

ответ

0

Прежде всего, имейте в виду, что отображение так много рядов на стороне клиента не рекомендуется, даже если текущие браузеры все более и более работают.

В любом случае, для ваших нужд, Dandelion-Datatables может помочь, особенно его функции server-side, если вы (ваш клиент, я имею в виду), принесите страницу результатов.

Под капотом DataTables выполняет вызов AJAX с некоторой информацией, например, количеством отображаемых строк, начальным элементом и конечным. Конечно, вы должны сделать доступными серверные запросы, которые читают эти параметры и выполняют соответствующий запрос.

Образец доступен here, используя ваш стек технологии.

Отказ от ответственности, требуемый StackOverflow, я являюсь автором проекта Dandelion.

+0

У меня есть сомнения, когда вы, ребята, говорите о стороне сервера, какая часть вы говоря о? потому что я считаю, что нет возможности заполнить таблицу на стороне сервера, что я делаю на стороне сервера, получаю данные из базы данных, помещаю эти данные в список, а затем возвращаю этот список на страницу html (и я понимаю, что html-страница - это клиентская сторона), так как вы можете заполнить таблицу на стороне сервера, а затем вернуть таблицу ??? – stackUser2000

+1

Действительно, не существует способа заполнить таблицу на стороне сервера, и я тоже не думаю, что это хорошая причина. Посредством обработки на стороне сервера я имею в виду «метод, позволяющий всем« тяжелым подъемам »выполнять механизм базы данных на стороне сервера (они полностью оптимизированы для такого рода вещей), а затем информация, нарисованная в веб-браузере пользователя »(цитируется по адресу http://legacy.datatables.net/usage/server-side). Таким образом, трюк состоит в том, чтобы выполнить так мало обработки клиентской стороны, как обработку, возвращая уже отфильтрованный/выгружаемый список строк. – tduchateau

+0

мммм, так как я не могу изменить свой запрос, что мне делать, я не против использования javascript или ajax, если это поможет ?. но я сомневаюсь, что мне нужно изменить ?, способ, которым я извлекаю данные, я не думаю, что я задерживаю эти 8 секунд, чтобы выполнить запрос, и время, которое я беру для преобразования этих данных в список POJO, моя проблема связана с 40 секундами, которые заставляют thymeleaf выполнять этот цикл '' .. Так что мне делать с моим списком pojos, прежде чем передавать его на мою страницу html ?? – stackUser2000

Смежные вопросы