您好我有一個primefaces數據表有大約52000記錄被提取。因爲它是一個大型的數據集,我嘗試使用滾動行數等於20的primefaces的實時滾動功能。的列是53.該表還在每列上都有篩選和排序功能。即使我對錶的性能不滿意,頁面加載大約需要15秒,最糟糕的是它需要大約65秒用於在滾動結束時加載下一組20條記錄。Primefaces實時滾動花費很長時間與大型數據集
僅用於測試,我將記錄總數減少到25000,並且性能提高了29秒的滾動時間。 我真的無法理解,爲什麼每次只顯示20條記錄需要很長時間。記錄總數不應該影響性能。
有人可以請建議如何提高performance.I無法爲這個實現分頁,因爲我的客戶不希望it.Thanks提前
我的JSF代碼片段
<p:dataTable id="arcRecList" var="data"
value="#{archivedRecordBean.archiveItems}"
tableStyle="table-layout:auto; width:80%;" styleClass="datatable"
scrollable="true" scrollWidth="84%" scrollHeight="69%"
columnClasses="columnwidth" liveScroll="true" scrollRows="20"
filteredValue="#{archivedRecordBean.filteredArchiveItems}">
<p:column style="width:250px" headerText="Insured"
filterBy="#{data.insuredName}" sortBy="#{data.insuredName}">
<h:outputText value="#{data.insuredName}" />
</p:column>
<p:column style="width:250px" headerText="City"
filterBy="#{data.custAddress_City}"
sortBy="#{data.custAddress_City}">
<h:outputText value="#{data.custAddress_City}" />
</p:column>
.
.
.53 columns
.
</p:dataTable>
我的管理豆
@ManagedBean
@RequestScoped
公共類ArchivedRecordBean實現Serializable {
private List<WorkSpaceItem> archiveItems=null;
private List<WorkSpaceItem>filteredArchiveItems;
private WorkSpaceItem objWorkSpaceItem=null;
JdbcConnection jdbcConnection=null;
Connection connection=null;
Statement selectStmt=null;
ResultSet rs=null;
public ArchivedRecordBean()
{
getArchiveFields();
}
public List<WorkSpaceItem> getArchiveItems() {
return archiveItems;
}
public void setArchiveItems(List<WorkSpaceItem> archiveItems) {
this.archiveItems = archiveItems;
}
public WorkSpaceItem getObjWorkSpaceItem() {
return objWorkSpaceItem;
}
public void setObjWorkSpaceItem(WorkSpaceItem objWorkSpaceItem) {
this.objWorkSpaceItem = objWorkSpaceItem;
}
public List<WorkSpaceItem> getFilteredArchiveItems() {
return filteredArchiveItems;
}
public void setFilteredArchiveItems(List<WorkSpaceItem> filteredArchiveItems) {
this.filteredArchiveItems = filteredArchiveItems;
}
public void getArchiveFields()
{
try
{
jdbcConnection=new JdbcConnection();
connection=jdbcConnection.getJdbcConnection();
selectStmt=connection.createStatement();
String query="select * from LPINFO where LPINFO.ClearDate < (select TOP 1 Tbl_CurrentYear.CurrentYear from dbo.Tbl_CurrentYear)"
+"AND (LPINFO.ClearDate is not null)";
rs=selectStmt.executeQuery(query);
archiveItems=new ArrayList<WorkSpaceItem>();
while(rs.next())
{
objWorkSpaceItem=new WorkSpaceItem();
objWorkSpaceItem.setInsuredName(rs.getString("InsuredName"));
objWorkSpaceItem.setCustAddress_City(rs.getString("CustAddress_City"));
objWorkSpaceItem.setCustAddress_State(rs.getString("CustAddress_State"));
.
.
.//Setting the values for remaining columns
.
.
archiveItems.add(objWorkSpaceItem);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
感謝Lukasz的回覆。真正值得使用LazyDataModel進行實時滾動。據我所知,根據primefaces論壇中的響應之一進行實況滾動是無用的(http: //forum.primefaces.org/viewtopic.php?f=3&t=20772) – rks