Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2014, 21:58
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

обновление данных в dom
задача по оптимизации.

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>Example</title>  
		<style>
		</style>
    </head>
	<body>
		<table>
			<tr>
				<td attr="111">123</td>
				<td>123</td>
				<td>123</td>
			</tr>
		</table>
	<script>
	var table = document.querySelector('table'),
		tds = table.querySelectorAll('td');
	
	var val = [222, 333, 444];
	[].forEach.call(tds, function (v, i) {
		v.innerHTML = val[i];
	});
	</script>
    </body>
</html>


в данном примере он каждый раз обращается к dom и при каждом
v.innerHTML = val[i];
я так полагаю идет перерисовка и соответственно падает проиводительность (может я и не прав здесь). есть какой то флаг или метод, который не будет перерисовывать таблицу после каждого присваивания??
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2014, 10:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от skrudjmakdak
есть какой то флаг или метод, который не будет перерисовывать таблицу после каждого присваивания?
Как вариант, дать нужному tbody...

display: none;

или
visibility; hidden;

хотя второй вариант таки участвует в форматировании... Т.ч. первый предпочтительнее...
Ответить с цитированием
  #3 (permalink)  
Старый 06.11.2014, 08:21
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

решил проделать эксперимент, тестил в хроме:
<html>
	<head> 
	</head>

	<body>
		<input type="button" value="простое обновление" onclick="up1();">
		<input type="button" value="обновить спрятав таблицу" onclick="up2();">
		<div></div>
		<script>
var div = document.querySelector('div'), num = 1;

var trs = [];
for (var i = 0; i < 10000; ++i) {
	trs.push('<tr><td>value1</td><td>value1</td><td>value1</td><td>value1</td></tr>');
}
	
div.innerHTML = '<table>' + trs.join('') + '</table>';

function update () {
	var val = 'value' + (++num);
	console.time('time');
	var tds = div.querySelectorAll('td');
	
	for (var i = 0, ln = tds.length; i < ln; ++i) {
		tds[i].innerHTML = val;
	}
	console.timeEnd('time');
}

function up1 () {
	update();
}

function up2 () {
	div.style.display = 'none';
	update();
	div.style.display = 'block';
}
		</script>
	</body>

</html>


при 10000 данных отрабатывает на ура как при первом подходе так и при втором..

Последний раз редактировалось skrudjmakdak, 06.11.2014 в 08:23.
Ответить с цитированием
  #4 (permalink)  
Старый 06.11.2014, 09:04
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от skrudjmakdak
отрабатывает на ура как при первом подходе так и при втором
Уже хорошо... Значит выбирай любой!
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2014, 04:11
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от skrudjmakdak
при 10000 данных отрабатывает на ура как при первом подходе так и при втором..
И чем твой "первый" отличается от изначального?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление данных в грид, reload demi ExtJS 2 31.08.2013 12:29
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
hta/jscript обновление данных MySQL через ODBC драйвер Space-06 Events/DOM/Window 0 26.12.2011 22:19
Динамическое обновление данных с БД Alex-ko AJAX и COMET 2 12.12.2011 15:00
Обновление элемента страницы с базой данных shaltay AJAX и COMET 2 20.05.2011 12:56