Если вы не используете блок ({}
) в качестве тела функции стрелки , тело должно быть выражением :
ArrowFunction:
ArrowParameters[no LineTerminator here] => ConciseBody
ConciseBody:
[lookahead ≠ { ] AssignmentExpression
{ FunctionBody }
Но throw
- это утверждение , а не выражение.
В теории
() => throw x;
эквивалентно
() => { return throw x; }
, что также недействительно.
jQuery empty ()
занимает много времени в вашей таблице, потому что он выполняет действительно колоссальный объем работы с содержимым очищенного элемента в интересах предотвращения памяти утечки. Если вы можете смириться с этим риском, вы можете пропустить задействованную логику и просто выполнить ту часть, которая избавляется от содержимого таблицы, например:
while ( table.firstChild )
table.removeChild( table.firstChild );
или
table.children().remove();
Недавно у меня были очень большие таблицы данных, которые занимали от 15 секунд до минуты обработки при внесении изменений из-за всех выполняемых манипуляций с DOM. Я снизил его до <1 секунды во всех браузерах, кроме IE (в IE8 это занимает 5-10 секунд).
Наибольший прирост скорости, который я обнаружил, заключался в удалении родительского элемента, с которым я работал, из DOM, внесении в него моих изменений, а затем повторной вставке его обратно в DOM (в моем случае tbody
).
Здесь вы можете увидеть две соответствующие строки кода, которые дали мне огромное увеличение производительности (с использованием Mootools, но могут быть перенесены на jQuery).
update_table : function(rows) {
var self = this;
this.body = this.body.dispose(); //<------REMOVED HERE
rows.each(function(row) {
var active = row.retrieve('active');
self.options.data_classes.each(function(hide, name) {
if (row.retrieve(name) == true && hide == true) {
active = false;
}
});
row.setStyle('display', (active ? '' : 'none'));
row.store('active', active);
row.inject(self.body); //<--------CHANGES TO TBODY DONE HERE
})
this.body.inject(this.table); //<-----RE-INSERTED HERE
this.rows = rows;
this.zebra();
this.cells = this._update_cells();
this.fireEvent('update');
},
Нужно ли вам заново заселить все сразу, или вы можете сделать это с помощью chunks на setTimeout ()? Я понимаю, что это, вероятно, займет еще больше времени, но это 'Для пользователя многого стоит увидеть, а не очевидная блокировка.