回答
更新2
我派我的更新上面的代碼的原作者,但直到他決定將它張貼,here is my updated version。如果您決定這麼做,它會加快標準內置排序()的使用。它也用穩定的合併分類取代穩定的雞尾酒分類。合併排序幾乎和在我的測試中使用sort()一樣快。我希望有所幫助。
更新
我不再認爲有瀏覽器之間存在較大的差異,只要內置sort()函數而言。例如,IE8的整體速度遠遠低於Chrome瀏覽器,但我不認爲它只與排序功能有關。我使用一些隨機數據在IE8中進行了一些分析。我發現當列數據是數字或日期時,原始代碼可以得到相當大的改進。將這些數據類型的比較函數中的正則表達式搜索放慢了很多,因爲每次在3000個元素的大約60,000個比較的元素之間進行比較時,它們都會減慢。正則表達式的數量是其兩倍。通過在我們開始分類之前完成所有這些工作,我們可以做到3000個正則表達式,而不是12萬個。這可以節省大約50%的時間。我會稍微將我的更改提交給可排序代碼。
除此之外,大部分時間都是重新排序DOM元素,而不是排序(除非您使用的是振動篩分類)。如果你能找到一個更快的方法來做到這一點,那麼你可以節省一些時間,但我不知道有什麼辦法做到這一點。
原來的答覆:
這裏的問題可能與實際排序做。如果您取消註釋了其中的一些代碼(並註釋了其他一些代碼),那麼您的代碼正在使用振動篩分來獲得穩定的排序。振盪器排序本質上是雙向的氣泡排序。 O(N^2),泡泡排序非常緩慢。如果您沒有取消註釋該代碼,那麼它將使用JavaScript的內置sort()函數以及各種比較函數。這個問題是這個sort()函數是implemented differently in different browsers,所以你可能想看看這個問題是否在某些瀏覽器中發生,而不是在其他瀏覽器中發生。顯然,Webkit代碼仍然使用一個選擇,或者min,排序爲O(N^2)。這幾乎讓我想哭。你用什麼瀏覽器來測試它?
如果排序函數結果是問題,那麼您可以嘗試更改上面的代碼來起訴合併排序或快速排序都是O(N日誌N)。爲了避免O(N^2)的情況,快速排序要稍微複雜一點,所以你可能想要堅持合併排序。此外,合併排序是一個穩定的排序。 This page有一個例子讓你開始合併排序。
你的方式回答了你自己的問題。
看看排序腳本。
排序3000條記錄,重新排列DOM並渲染輸出。
這肯定需要時間。
您正在使用的此腳本適用於小型記錄集。
建議:使用服務器端排序並在頁面中呈現結果,每個頁面包含說50條記錄。對於約3000條記錄,您將有大約60頁。
可以說你是第45頁。然後,您啓動一個SQL查詢來排序(asc/desc)並跳過第一個44 * 50記錄並檢索下一個50個記錄(對於第45頁)。
如果分頁的手段我不會得到恐懼......對於排序...客戶端說沒有分頁... – Bharanikumar 2010-09-07 16:34:51
那麼你應該改變@Justin建議的排序算法。 – Rahul 2010-09-07 18:11:01
這個庫似乎使用DOM操作進行排序。
最好每次生成表格並使用innerHTML
注入表格。
在今天的JavaScript引擎中,這看起來是瞬間的。
即使是IE6也不錯。
這就是說...顯示3000條線給人是有問題的。
但這是另一個辯論;)
不,完全相反。使用'innerHTML'總是比使用DOM慢,特別是在你推薦的情況下。 – 2010-09-07 20:27:38
我想知道什麼樣的測試讓你得出這樣的結論。我喜歡模板引擎,使用innerHTML而不是DOM使它們非常快速。對你的評論完全感到驚訝。 – Mic 2010-09-07 22:33:05
- 1. 排序的文件得到
- 2. jQuery排序得到.index()排序前後?
- 3. XML屬性得到排序
- 4. 小程序變得掛起
- 5. Thread.sleep使得程序掛起?
- 6. 計算得到的getter中的排序
- 7. 的Javascript排序()排列
- 8. 排序不排序javascript
- 9. 爲什麼要使用JavaScript選擇排序掛
- 10. 一批FTP掛在得到
- 11. jBrowserDriver得到電話掛起
- 12. C#排序VS的JavaScript排序
- 13. JavaScript的排序數組雙排序
- 14. 爲什麼Javascript的Bubble排序比其他排序算法快得多?
- 15. 我的線程沒有得到通知,我的程序掛起
- 16. 得到的JavaScript
- 17. 排序在Javascript
- 18. Javascript Array排序
- 19. 排序在Javascript
- 20. 排序在JavaScript
- 21. Javascript表排序
- 22. Javascript排序
- 23. JavaScript排序
- 24. 排序在javascript
- 25. 無法得到rubaxa:可排序工作
- 26. 得到重複值與排序數據
- 27. datatables排序後得到行位置
- 28. 得到一個數組排序
- 29. 數組排序得到錯誤
- 30. 排序2d arraylist和得到索引java
你將不得不在你的頁面上發佈實際的代碼。 – Pointy 2010-09-07 15:33:56