2011-12-16 59 views
1

我目前正在嘗試創建一個DataGrid,它可以將具有值列表的實體作爲一行。列表中的每個值都在DataGrid的自己的列中。實體的值列表可能具有不同的大小,因此DataGrid將具有可變數量的列。我注意到,當我嘗試創建DataGrid並循環將每個列添加到DataGrid的過程時,添加列所需的時間不會線性增長。如何快速添加許多列到GWT DataGrid

這裏是我用測試添加的列

DataGrid<String> table = new DataGrid<String>(); 
table.setPageSize(25); 
int NUM_COLUMNS = 40; 

for (int i = 0; i < NUM_COLUMNS; i++) { 
    GWT.log("Adding column "+i); 
    TextColumn<String> nameColumn = new TextColumn<String>() { 
     public String getValue(String object) { 
     return object; 
     } 
    }; 

    table.addColumn(nameColumn, "Column " + i); 
    table.setColumnWidth(nameColumn, 100, Unit.PX); 
} 

ArrayList<String> data = new ArrayList<String>(); 
for (int i = 0; i < 10; i++) { 
    data.add("row "+i); 
} 

table.setRowCount(data.size(), true); 
table.setRowData(0, data); 
table.setWidth("100"); 

的速度代碼這花費約48秒,給予或採取1秒,每我跑它的時間。似乎加載少於10列的速度相當快,但隨着列數的增加,加載它的時間呈指數級增長。

是否有另一種方法可以更快地將列添加到DataGrid?提前致謝。

回答

1

您可能想問自己的一個問題是,如果有更好的方法來做到這一點。具有40列(IMO)的表似乎效率低下。一般來說,如果在DataGrid中載入超過15列的數據時,將會出現明顯的性能損失,並且FlexTable不會更好。

我已經與DataGrid合作過很多次,並沒有看到任何你正在談論的行爲,雖然在我的情況下,他們通常只有10列或更少的列有幾千行。 (數據當然是分頁的,而不是一次卡住)。

我注意到的一件事情是加速它的預渲染。在添加所有這些列之前,您是否將該表添加到DOM中,還是先將它們全部添加?可以花費很多時間等待DOM更新。如果您在渲染完所有內容後將其添加到頁面中,則可能會以最快的速度查看,因爲沒有用於同時添加多列的內置功能。

+0

這就是我所害怕的。專欄是必要的,大部分時間將不到15,但有幾個有幾十個。我最後設置了DataGrid的行數據,就像上面所示,所以我想我將不得不嘗試找到處理列的創造性方式。無論如何,謝謝你。希望別人可能有一個想法。 – user1076377 2011-12-17 00:03:21