У меня есть приложение, которое вызывает веб-работник после нажатия кнопки. Расчеты перемещаются на работника для облегчения пользовательского интерфейса и делают его отзывчивым к действию пользователей во время проведения вычислений.
Все идет хорошо, а после примерно 0,8-1,5 тыс. Работник посылает ответ. На работнике. Расположите все необходимые домовые действия. Но после того, как этот GC появляется и практически блокирует интернет-интерфейс на 2 или более секунд в зависимости от CPU. Это действительно запутает меня, потому что блокировка пользовательского интерфейса - это то, что я хочу предотвратить.
Вот скриншот вкладки консоли временной шкалы / памяти: http://i.imgur.com/zuoha.jpg
Как вы можете видеть события GC сразу после всех манипуляций DOM. На самом деле есть только одно перераспределенное событие (используется DocumentFragment).
Основной код JS:
var sortWorker = new Worker('js/contactsorter.js');
sortWorker.onmessage = function(e) {
var messages = [];
e.data.forEach(function(userDoc) {
var contactSection = _drawContact(userDoc);
messages.push(contactSection);
});
meta.append(messages); // this actually appends document fragment as a child
};
sortWorker.postMessage(postMessageData);
Contactorter.js (работник):
onmessage = function(e) {
var uid, output = [], usersStat = {};
// calculations...
postMessage(output);
close();
};
Есть ли способ избежать этих событий GC в этом месте или нет?
UPD: мне кажется, что событие GC Время зависит от суммы данных, которые были отправлены на работника. UPD2: После выключения и загрузки событий GC происходят только дважды блокируют UI менее чем за секунду. HM?