Браузер не может отрисовать очень большую таблицу. А нужно. Что делать?

Здравствуйте.
Помогите пожалуйста. Есть необходимость разместить на странице таблицу 1200х1200 ячеек. Естественно для её создания я использую скрипт. Вот он:
<script type="text/javascript">
	$(document).ready(function() {
		for(var r = 0; r < 1201; r++){		
			$('table#coords').append('<tr>');			
			for(var d = 0; d < 1200; d++){$('table#coords tr:nth-child('+r+')').append('<td></td>');}			
			$('table#coords').append('</tr>');	
		}
	})
</script>

На меньшем количестве ячеек скрипт работает нормально. Но когда ставлю нужные 1200х1200 браузер начинает задыхаться, даже на локалхосте. Предлагает несколько раз покинуть страницу. В итоге так ничего и не показывает.

Вопрос такой, может я прошу слишком многого? И браузеры просто не в силах справиться с такой задачей? Хотя вроде ж в 21м веке живём.

Или может я что-то не правильно делаю? Если у вас есть решение, буду очень признателен за помощь.

P.S. Браузеры пробовал разные (все популярные) - результат один и тот же (т.е. никакой).
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 4
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Вы на каждое добавление ячейки обновляете весь DOM/
Собирайте таблицу в виде строки, потом вставляйте ее целиком. или используйте DocumentFragment
Здесь подробнее https://learn.javascript.ru/multi-insert


UPD
Ответ написан
@Hedy
Вы пытаетесь отрисовать минимум 1200х1200 = 1 440 000 элементов - логично, что ни один браузер этого вам с приемлемым комфортом не сделает.

Вам нужно реализовать виртуальный скроллинг для ваших данных, т.е. отображать только видимую область вашей таблицы, а при скроллинге - перерисовывать ее.
Ответ написан
Комментировать
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Я, конечно, ОЧЕНЬ ПЛОХО разбираюсь во фронтенде и JS, но у меня есть предположение, что если вы не будете каждую из полутора миллионов ячеек пихать в живой DOM в каждой итерации цикла, то браузеру уже немного полегчает.
Не говоря о том, что jQuery для этой задачи не просто не нужна, но скорее всего прилично её замедляет.
Но, конечно, лучше дождаться ответа нормального фронтендера.
Ответ написан
@dimoff66
Кратко о себе: Я есть
Пример горизонтальной прокрутки и отображения только видимых элементов (прокручивается слайдером слева). Вертикальную прокрутку можно сделать более менее по аналогии.

Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы