Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2009, 17:46
Аспирант
Отправить личное сообщение для Bajjy Посмотреть профиль Найти все сообщения от Bajjy
 
Регистрация: 25.09.2008
Сообщений: 33

createElement('table') и тормоза
создаю таблицу, в принципе, стандартным методом:
var table = document.createElement('table');
    table.style.borderCollapse = 'collapse'
    table.style.position = "absolute"
    table.style.width = xlen*cellwd+'px'
    table.style.height = ylen*cellhg+'px'
    table.style.borderWidth = '0px'
    table.style.borderStyle = 'solid'
    table.id=tid
    for (var k = 0; k < 50; k++) {
        var row = table.insertRow(-1);
        for (var j = 0; j < 50; j++) {
            var cell = row.insertCell(-1);
            cell.style.width = cellwd+'px'
            cell.style.height = cellhg+'px'
            cell.style.borderWidth = '1px'
            cell.style.borderStyle = 'solid'
            cell.style.borderColor = '#cccccc'
            cell.innerHTML = " ";
        }
    }

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

firefox 3.5.1

Последний раз редактировалось Bajjy, 23.07.2009 в 18:03.
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2009, 17:47
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Нельзя клонировать темы
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2009, 17:49
Аспирант
Отправить личное сообщение для Bajjy Посмотреть профиль Найти все сообщения от Bajjy
 
Регистрация: 25.09.2008
Сообщений: 33

прошу прощения, если я сделал гадость. но все-таки прошу помощи по-теме
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2009, 18:22
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Bajjy
cell.style.width = cellwd+'px'
cell.style.height = cellhg+'px'
cell.style.borderWidth = '1px'
cell.style.borderStyle = 'solid'
cell.style.borderColor = '#cccccc'
и
Сообщение от Bajjy
table.style.borderCollapse = 'collapse'
table.style.position = "absolute"
table.style.width = xlen*cellwd+'px'
table.style.height = ylen*cellhg+'px'
table.style.borderWidth = '0px'
table.style.borderStyle = 'solid'
Есть большое зло!!! Для таких вещей просто меняем класс, в котором это всё будет прописано.
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2009, 18:51
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от B~Vladi
Для таких вещей просто меняем класс, в котором это всё будет прописано.
Можно еще cssText попробовать.
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2009, 18:53
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Riim
Можно еще cssText попробовать.
тоже вариант... но думаю для него это будет сложнее
Ответить с цитированием
  #7 (permalink)  
Старый 24.07.2009, 01:42
Аспирант
Отправить личное сообщение для Bajjy Посмотреть профиль Найти все сообщения от Bajjy
 
Регистрация: 25.09.2008
Сообщений: 33

спасибо за помощь. сразу следующий вопрос.
stage.timeline = function (source, routx, routy){
for(var i=0; i<ttimeline.length; i++){
var model = document.getElementById(ttimeline[i]);
	model.left-=-model.routx
	model.top-=-model.routy
	model.style.left = model.left+'px'
	model.style.top = model.top+'px'

	if (model.what == 'player') {
		model.src = eval(model.actor+"_"+model.pscen)[model.rmv]
		if (model.rmv == eval(model.actor+"_"+model.pscen).length) 
			model.rmv = 0
		model.rmv++
	}

}
if(usetimer==1)setTimeout(stage.timeline,v_time)
}

var i=1;
stage.new_player_model = function (left, top){
	var onew=document.createElement("img");
	document.getElementById("oworld").appendChild(onew)
	onew.src="sprites/full_plt/looking e0.gif"
	onew.id='b'+i
	onew.width=64
	onew.what="player"
	onew.left=left
	onew.top=top
	onew.actor='full_plt'
	onew.pscen='running_e'
	onew.animations = new Array("running_e")
	onew.wvector='w'
	onew.nvector='n'
	onew.evector='e'
	onew.svector='s'
	onew.vector='e'
	onew.routx='5'
	onew.routy='0'
	onew.rmv='0'
	onew.style.width=onew.width+'px'
	onew.style.position="absolute"
	onew.style.left=onew.left+'px'
	onew.style.top=onew.top+'px'
	onew.timeturn=ttimeline.length
	ttimeline.push(onew.id)
	i++
}

stage.new_player_model добавляет новый объект на страницу и в массив ttimeline, stage.timeline перебирает элементы массива. каждый элемент по-сути - img, stage.timeline меняет src и через определенное время сдвигает элемент. вот только если элементов 5 и больше - начинаются тормоза.
Я так понимаю, что мой код далеко не совершенство.
помогите с оптимизацией, подскажите на что обратить внимание.
Ответить с цитированием
  #8 (permalink)  
Старый 24.07.2009, 09:57
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

При сложном рендеринге + таймауты, избежать тормозов практически невозможно. Вам нужно не код оптимизировать, а визуальную нагрузку на браузер. Иногда простое временное скрытие ненужных элементов может сильно облегчить жизнь браузера.
Ответить с цитированием
  #9 (permalink)  
Старый 24.07.2009, 09:58
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

И ещё совет. Устанавливать свойства нужно ПЕРЕД его вставкой в DOM.
Ответить с цитированием
  #10 (permalink)  
Старый 24.07.2009, 10:17
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от B~Vladi
Устанавливать свойства нужно ПЕРЕД его вставкой в DOM.
Вот это иногда очень помогает.
Ответить с цитированием
Ответ



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

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