Самый быстрый способ добавить содержимое HTML отделению, использующему JavaScript

возможно, можно обновить gradle версию к 4.10.1 андроидам buildtool к 3.3.0

18
задан EMP 7 September 2009 в 03:42
поделиться

5 ответов

Вы конкретно сказали, что добавляете, что означает, что вы прикрепляете его к тому же родителю. Вы делаете что-то вроде:

myElem.innerHTML += newMessage;

или

myElem.innerHTML = myElem.innerHTML + newMessage;

, потому что это крайне неэффективно (см. Этот тест: http://jsben.ch/#/Nly0s ). Это заставит браузер сначала выполнить очень-очень большое конкатенирование строк (что никогда не бывает хорошо), но тогда, что еще хуже, придется повторно проанализировать вставку и отобразить все, что вы ранее добавили. Гораздо лучше было бы создать новый объект div, использовать innerHTML для вставки сообщения и затем вызвать метод dom appendChild, чтобы вставить вновь созданный div с сообщением. Тогда браузеру останется только вставить и отобразить новое сообщение.

24
ответ дан 30 November 2019 в 08:27
поделиться

Можете ли вы разбить текст и добавить его по частям? Оберните части текста в теги div, а затем разделите их, добавив на страницу более мелкие div.

Хотя это не ускорит общий процесс, воспринимаемая производительность, вероятно, будет лучше, поскольку пользователь видит первые элементы быстрее, а остальные загружаются позже, предположительно за пределами видимой страницы.

Кроме того, вам, вероятно, следует пересмотреть, как много данных, которые вы отправляете и встраиваете на страницу. Если браузер работает медленно, вероятно, объем данных будет огромным - действительно ли это имеет смысл для пользователя? Или более понятен интерфейс подкачки (или другой механизм инкрементной загрузки)?

1
ответ дан 30 November 2019 в 08:27
поделиться

В соответствии с ответом Рика, почему бы просто не передать информацию обратно в формате JSON, чтобы вы могли просто просмотреть ее, используя setTimeout, и отобразить, возможно, 2-5 сообщений, затем вызвать setTimeout, затем он будет выполнять следующий пакет, пока массив JSON не будет обработан.

Вы должны использовать innerHTML, поэтому ваш javascript может создавать его динамически и добавлять в div, но я бы сделал это только для первого пакета, чтобы быстро все подготовить.

После этого я бы клонировал первый пакет и изменил innerhtml для каждого из других сообщений вместе с другой информацией и добавил это в дерево доменов.

Клонирование будет быстрее, чем создаете новые элементы, и у вас не будет проблем, если что-то еще изменит дерево dom во время обработки.

0
ответ дан 30 November 2019 в 08:27
поделиться

«Все это внутри стола, но, надеюсь, это не имеет значения»

На самом деле это очень важно. Из-за природы таблиц ячейка часто не может быть отображена до тех пор, пока не будут вычислены ширина и высота всех ячеек в столбце и строке. table-layout: fixed преодолевает это за счет блокировки ширины и высоты ячейки на основе первой строки.

Короче говоря, может быть лучше не заключать в таблицу или, если данные действительно табличны, попробовать фиксированный рендеринг макета.

1235] http://www.w3schools.com/Css/pr_tab_table-layout.asp

0
ответ дан 30 November 2019 в 08:27
поделиться

Я написал нечто подобное, и это было непросто. Во-первых, вам нужно изолировать проблему.

  1. Это код отрисовки? Попробуйте закомментировать весь рендеринг и посмотрите, не тормозит ли сам AJAX Firefox. Если да, попробуйте разные подходы к рендерингу, как описано выше.

  2. Это сеть? Попробуйте закомментировать Ajax и просто периодически запускайте настройку innerHTML. Если это проблема, вам может потребоваться поэкспериментировать с другими настройками времени.

0
ответ дан 30 November 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: