Как наиболее быстро отрисовать DOM?

Есть несколько способов генерации html в скрипте, 1 вариант:
function CreateHtml() {
		var Modules = getModules();
		var Result = '<div class="randClass">... *Modules ...</div>';
		// *Modules, тут мы вызываем другие функции построения модулей шаблона, уровень вложенности элементов может быть конским, конечный размер строки может составлять 300-500кб

		return Result;
	}


или вариант 2:
function CreateHtml() {
		var Modules = getModules();
		var Result = $('<div/>', {
			'class':'randClass'
		})
			.append (
				Modules
			);
		// *Modules, фактически все происходит как и в 1 примере, но используется метод Jquery append
		return Result;
	}


или вариант 3:
function CreateHtml() {
		var Modules = getModules();
		var Result = document.createElement('div');
		Result.class = 'randClass';
		Result.innerHTML = Modules;
		// *Modules, аналогично 1 и 2 примеру, но построение элементов происходит через метод createElement
		return Result;
	}


Уточнение 1. К чему я привел вышеуказанные функции? Для пояснения того, что само построение строки или объекта разными методами, занимает достаточно мало времени (тут можно мне поверить, не буду приводить ненужные примеры) и составляет максимум 100 мс для 750кб конечного HTML-кода.

Уточнение 2. Тянуть с сервера уже готовый html или использовать готовые js-шаблонизаторы я не могу. Т.к. общение с сервером происходит по JSON, а конечный код генерируется по многим условиям. Да и не в этом дело, а в чем дело, читай дальше. =)

Проблема. Как только я собираюсь разместить полученный результат в DOM-дереве различными методами - рендеринг занимает уже от 500 мс и до десятков секунд. При наличии многих тысяч элементов, браузер фактически зависает и прелоадерами тут не отделаться.

Вопрос. Какими путями можно решить проблему с долгой генерацией DOM-дерева исходя из вышеописанных условий?
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Ну JQ понятно дело это смешно.
2,5 сек для 1000 элементов это очень много, может я чего не понял? Вставка 1000 узлов это 5-15мс пусть.
Остается либо вставлять html если узлы разношерстные, либо оперировать DOM createElement, если простые, но много.
Можно просто прелодер заделать и вставлять узлы группами с разрывом через promise, setTimeout(f,0), если там действительно улов тысячи, чтоб браузер не подвисал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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