Я обнаружил, что встроенная функция разбивки на страницы таблицы данных Primefaces является одной из лучших функций и провела на ней большое количество нагрузочного тестирования, принеся наборы записей с более чем 30 000 объектов Hibernate и посчитав, что производительность невелика. Это, конечно, означает, что у вас будет 30 000 сущностей в сеансе, поэтому в моем web.xml
есть следующее, чтобы помочь сохранить сеанс на стороне сервера.
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
Это уменьшит размер ViewState, что позволит значительно уменьшить размер запроса / ответа, однако при этом может сильно пострадать память на стороне сервера.
Еще одна потенциальная возможность в некоторых реализациях JSF, чтобы помочь уменьшить размер ViewStat или использование памяти сеанса, - это сжатие. Следующая ссылка описывает ряд параметров конфигурации SUN RI и MyFaces JSF, которые можно установить, некоторые из которых предоставляют возможность сжатия состояния сеанса. http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frweb_jsfengine.html
Что касается более подробной информации о том, как работает функция разбивки на страницы Primefaces DataTable, почему бы не перейти прямо к источнику? Primefaces - это, в конце концов, проект с открытым исходным кодом, так что просто посмотрите на код и посмотрите, что вы можете узнать: http://code.google.com/p/primefaces/source/browse/#svn%2Fprimefaces