Почему хвост длинный файл аварийного завершения Chrome?
Моя цель - показать файл журнала в реальном времени. Я делаю это через веб-сокет, но когда абзац ('p') HTML-кода начинает становиться большим (450 строк), Chrome начинает отставать и зависать.
Реализация такова:
var paragraph = document.getElementById('idLog');
stompClient.subscribe('/suscribers/tomcatlog', function (data) {
var lineLog = JSON.parse(data.body);
if (lineLog.line !== null) {
paragraph.innerHTML += lineLog.line;
paragraph.appendChild(document.createElement("br"));
var elem = document.getElementById('main');
elem.scrollTop = elem.scrollHeight;
}
});
Почему это происходит?
1 ответ
Решение
Делать строковые манипуляции с помощью +=
с постоянно растущими струнами, как известно, медленно. Каждый раз, когда вся строка должна быть скопирована в новую, с добавлением новых символов.
Кроме того, постоянно растущая строка должна анализироваться снова и снова - ведь мы работаем в браузере.
Вместо этого вы должны создать текстовый узел и добавить его непосредственно к родительскому элементу, например так:
if (lineLog.line !== null) {
paragraph.appendChild(document.createTextNode(lineLog.line));
paragraph.appendChild(document.createElement("br"));
// ...
}