因此,我構建了這個類似於郵件程序的HTML查看器(沒有真正的電子郵件,只是從用戶到用戶的一些消息)。它基本上就像Windows資源管理器一樣,在頂部有標籤,文件可以按日期或按字母順序排序。 每個消息是這樣的:優化dom-heavy JS排序
<div class="mail_msg" d_id="363">
<div class="done"><img src="../"></div>
<div class="absender">demo</div>
<div class="subject">subject</div>
<div class="name">name</div>
<div class="date">16.09.2010</div>
</div>
頂上所有這些消息,有一個酒吧按字母順序或按日期排序。 (使用prototypejs)
$$('.absender_label','.subject_label', '.bname_label').each(function(el){
el.observe('click', function(){
/* ... */
var tar = el.className.split('_')[0];
var els = $('widget_mail_'+target).select('.mail_msg'),
sortedEls = els.sort(function(x, y) {
var a = x.down('.'+tar).innerHTML.toLowerCase(),
b = y.down('.'+tar).innerHTML.toLowerCase();
return a < b ? -1 : a > b ? 1 : 0;
});
$('widget_mail_'+target).select('.mail_msg').invoke('remove');
sortedEls.each(function(x){
if(dir=='bottom') {
$('widget_mail_'+target).insert({bottom:x});
} else if(dir=='top') {
$('widget_mail_'+target).down('.mail_msg_label').insert({after:x});
}
});
});
});
我知道有太多的DOM操作正在進行。我選擇所有相關的div,對它們進行排序,丟棄所有舊的未排序的消息,並在頂部或底部插入排序的消息(先從A-Z單擊,再從Z-A單擊)。
它仍然適用於數百條消息,但需要2或3秒。我以JSON的形式接收消息並從中解析HTML,因此使用this這樣的表格排序腳本在這一點上不是一種選擇。
如何優化此排序?
如果不知道性能瓶頸在哪裏,不能真正說出來。這個「2或3」秒花費的時間大多是從服務器重新獲取數據,處理這些數據,呈現HTML?你有沒有嘗試在Firebug/Chrome/Safari中使用分析器? – MooGoo 2010-09-16 15:04:48