Итак, я построил эту программу просмотра HTML, похожую на почтовую программу (никаких реальных писем, только некоторые сообщения от пользователя к пользователю). Он в основном работает как проводник Windows, где у вас есть метки вверху и файлы, которые вы можете сортировать по дате или по алфавиту.
Каждое сообщение выглядит так:
<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 , на данный момент не вариант.
Как я могу оптимизировать эту сортировку?