2015-09-22 15 views
1

我正試圖做一個web服務,其中多個用戶可以同時登錄。在Nodejs服務器上,有一個包含所有用戶的未排序陣列。和一個包含所有用戶的數據庫。可排序的用戶列表最佳實踐

每個用戶都可以隨時看到每一個用戶在網上一個HTML自舉表,與用戶名,標識不同的列,上線以來....,也有名單,其中包括組在線和離線用戶。重要的部分是,該表應該是更新如每3-5秒更新

我希望用戶能夠通過單擊列的Tableheader來對聯機用戶表進行排序。最佳做法是什麼?

我目前只能想到兩種不同的解決方案,兩者對我來說似乎都不完美。

1.使用引導分揀

我省以何種方式在用戶想進行排序列表中的信息。 然後我收到未排序的數據並填充表格,之後我將觸發標題上的點擊並再次以相同的方式對錶格進行排序。

但是,如果我這樣做,我認爲用戶會一直注意到表格被重新填充,然後再次排序,如果每3-5秒完成一次。

2.保持排序的服務器列表上的

保持用戶的所有不同的排序列表我的服務器上的所有時間,讓服務器排序他們新每隔3-5秒。 然後,當客戶端請求它時,將他當前想要的排序列表發送給客戶端並填寫表格HTML。

但是,這種方式我認爲它會使用我的服務器相當多的資源,因爲它還必須爲一些混合的在線/離線用戶排序,這些用戶組可能會有很多不同的表,我必須不斷地在我的服務器上保存和重新排序。

是否有更好的方法來爲客戶實現許多可排序的用戶列表?

回答

1

UI的重要之處在於減少閃爍和任何滯後。在數據顯示在表格中之前,首先嚐試在用戶端測試排序。您不希望觸發點擊事件,因爲這可能會在數據進入,顯示,排序,然後再次顯示時產生閃爍效應。如果由於某種原因,排序時間過長,這可能會導致用戶界面出現滯後或不平衡,因此請進行測試,看看它的感覺如何。如果客戶端運行狀況不佳,我只會看服務器端。檢查你的CPU和RAM,看看如何最好地處理。即時排序可能適用於您的設置,或者如果您有一些閒置的空間,則可以將其保留在RAM中。

將服務器存儲在RAM中的站點範圍或線程引擎變量中。如果你可以避開它,線程引擎變量將是最快的選擇,但成本將是SORTEDDATA_BYTES * WEB_THREADS。

Array.prototype.keySort = function(k, descending) { 
    var z = descending === true ? -1 : 1; 
    this.sort(function(a, b) { 
    return a[k] > b[k] ? 1*z : a[k] < b[k] ? -1*z : 0; 
    }); 
    return this; 
}; 

var sortedJSON = { 
    UsernameAsc: JSON.stringify(data.keySort("Username")), 
    UsernameDesc: JSON.stringify(data.keySort("Username", true)), 
    IdAsc: JSON.stringify(data.keySort("Id")), 
    IdDesc: JSON.stringify(data.keySort("Id", true)) 
};