Задать вопрос

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

Здравствуйте.
Помогите пожалуйста. Есть необходимость разместить на странице таблицу 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. Браузеры пробовал разные (все популярные) - результат один и тот же (т.е. никакой).
  • Вопрос задан
  • 336 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 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
Кратко о себе: Я есть
Пример горизонтальной прокрутки и отображения только видимых элементов (прокручивается слайдером слева). Вертикальную прокрутку можно сделать более менее по аналогии.

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

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

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