возможно, можно обновить gradle версию к 4.10.1 андроидам buildtool к 3.3.0
Вы конкретно сказали, что добавляете, что означает, что вы прикрепляете его к тому же родителю. Вы делаете что-то вроде:
myElem.innerHTML += newMessage;
или
myElem.innerHTML = myElem.innerHTML + newMessage;
, потому что это крайне неэффективно (см. Этот тест: http://jsben.ch/#/Nly0s ). Это заставит браузер сначала выполнить очень-очень большое конкатенирование строк (что никогда не бывает хорошо), но тогда, что еще хуже, придется повторно проанализировать вставку и отобразить все, что вы ранее добавили. Гораздо лучше было бы создать новый объект div, использовать innerHTML для вставки сообщения и затем вызвать метод dom appendChild, чтобы вставить вновь созданный div с сообщением. Тогда браузеру останется только вставить и отобразить новое сообщение.
Можете ли вы разбить текст и добавить его по частям? Оберните части текста в теги div, а затем разделите их, добавив на страницу более мелкие div.
Хотя это не ускорит общий процесс, воспринимаемая производительность, вероятно, будет лучше, поскольку пользователь видит первые элементы быстрее, а остальные загружаются позже, предположительно за пределами видимой страницы.
Кроме того, вам, вероятно, следует пересмотреть, как много данных, которые вы отправляете и встраиваете на страницу. Если браузер работает медленно, вероятно, объем данных будет огромным - действительно ли это имеет смысл для пользователя? Или более понятен интерфейс подкачки (или другой механизм инкрементной загрузки)?
В соответствии с ответом Рика, почему бы просто не передать информацию обратно в формате JSON, чтобы вы могли просто просмотреть ее, используя setTimeout, и отобразить, возможно, 2-5 сообщений, затем вызвать setTimeout, затем он будет выполнять следующий пакет, пока массив JSON не будет обработан.
Вы должны использовать innerHTML, поэтому ваш javascript может создавать его динамически и добавлять в div, но я бы сделал это только для первого пакета, чтобы быстро все подготовить.
После этого я бы клонировал первый пакет и изменил innerhtml для каждого из других сообщений вместе с другой информацией и добавил это в дерево доменов.
Клонирование будет быстрее, чем создаете новые элементы, и у вас не будет проблем, если что-то еще изменит дерево dom во время обработки.
«Все это внутри стола, но, надеюсь, это не имеет значения»
На самом деле это очень важно. Из-за природы таблиц ячейка часто не может быть отображена до тех пор, пока не будут вычислены ширина и высота всех ячеек в столбце и строке. table-layout: fixed преодолевает это за счет блокировки ширины и высоты ячейки на основе первой строки.
Короче говоря, может быть лучше не заключать в таблицу или, если данные действительно табличны, попробовать фиксированный рендеринг макета.
1235] http://www.w3schools.com/Css/pr_tab_table-layout.asp
Я написал нечто подобное, и это было непросто. Во-первых, вам нужно изолировать проблему.
Это код отрисовки? Попробуйте закомментировать весь рендеринг и посмотрите, не тормозит ли сам AJAX Firefox. Если да, попробуйте разные подходы к рендерингу, как описано выше.
Это сеть? Попробуйте закомментировать Ajax и просто периодически запускайте настройку innerHTML. Если это проблема, вам может потребоваться поэкспериментировать с другими настройками времени.