Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 17.08.2011, 12:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Каждую следующую myFunction вызывать через setTimeout
Ответить с цитированием
  #12 (permalink)  
Старый 17.08.2011, 14:24
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

здесь представлен список свойств обращение к которым вызывает немедленный redraw элемента:
1. offsetTop, offsetLeft, offsetWidth, offsetHeight,
2. scrollTop/Left/Width/Height,
3. clientTop/Left/Width/Height,
4. getComputedStyle() или currentStyle в IE.
...фактически в IE8 100% работают только 1-ые...
На одном из англ.форумов вычитал
Цитата:
I use the following:

elm.style.display=”none”;
var redrawFix = elm.offsetHeight;
elm.style.display=”block”; // or other value if required

This works in all browsers I have needed it for – Opera, Konqueror, Safari and IE (including IE8 RC1 for which I just needed a redraw fix too). I haven’t ever needed it for Firefox though..
хотя у меня работает и без изменения свойства display, далее автор утверждает что именно такая конструкция работает всегда.
Ответить с цитированием
  #13 (permalink)  
Старый 17.08.2011, 14:28
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

Цитата:
Каждую следующую myFunction вызывать через setTimeout
без толку... пробовал...
Дело было в баге самого IE :
пока идет непосредственная работа с COM-компонентами в моем случае ActiveX, IE для повышения производительности отключает все вcтроенные redraw / reflow... хочешь что-то отрисовать - вызывай его принудительно. ("как?" - постом выше)
Ответить с цитированием
  #14 (permalink)  
Старый 18.08.2011, 13:25
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

И так окончательная точка
JavaScript у клиента в данный момент (не берем в расчет Web Workers которые еще "будующее") не выполняется асинхронно никак.
setTimeout и setInterval - вопреки рефу, псевдоасинхронность т.е.
управление не совмещает выполнение кодов разных функций за один такт...
Ответить с цитированием
  #15 (permalink)  
Старый 18.08.2011, 13:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от RUVATA
setTimeout и setInterval - вопреки рефу, псевдоасинхронность т.е.
Нормальная там асинхронность. Вы по какой-то причине считаете, что асинхронность == многопоточность, что не есть правда.
Ответить с цитированием
  #16 (permalink)  
Старый 19.08.2011, 00:46
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

********************

Последний раз редактировалось popov654, 19.08.2011 в 02:18.
Ответить с цитированием
  #17 (permalink)  
Старый 19.08.2011, 04:02
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от RUVATA
setTimeout и setInterval - вопреки рефу, псевдоасинхронность т.е.
управление не совмещает выполнение кодов разных функций за один такт...
когда одновременно выполняются две функции - это многопоточность.
а ассинхронность(в браузерном JS) - явление строго однопоточное.
ассинхронность позволяет положить функции в очередь, до наступления события, когда они смогут выполниться. При этом они вовсе не обязаные выполнятся одновременно, и даже не гарантируется что они выполнятся в указанном вами порядке(в случае когда они должны сработать "одноврменно").
Ответить с цитированием
  #18 (permalink)  
Старый 19.08.2011, 08:12
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

Вам как JavaScript-ерам должна быть знакома технология серверного JavaScript - NODE.js, вот здесь часть идеологии асинхронности...
Более того, не хотел бы с вами спорить, но видимо вы заблуждаетесь...
Сообщение от Gvozd
когда они смогут выполниться.
не когда они смогут, а тогда когда они должны будут выполниться - в этом суть асинхронности (таймеры и коллбэки).
Т.е. по наступлению события или таймера, исполнение текущего контекста приостанавливается, и исполняется контекст назначенный, после чего возобновляется выполнение текущего...
В нашем-же случае setTimeout и setInterval являются таймерами, но они не останавливают выполнение основного контекста, а покорно ждут пока контекст исполнится...
Ответить с цитированием
  #19 (permalink)  
Старый 19.08.2011, 08:34
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

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

Последний раз редактировалось float, 19.08.2011 в 08:40.
Ответить с цитированием
  #20 (permalink)  
Старый 19.08.2011, 08:46
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

вот некий код для "разбора полетов"
<html>
 <head> </head>
 
<body>
 <script type="text/javascript">
		
		AsyncTest()
	
	function AsyncTest(){
		var someText = ''

		setInterval(function(){someText = someText + '-AsyncInjection-';}, 12)

		for(var i = 0; i < 20; i++){
		  someText = someText + '-MainTheadInjection-'
		};

		alert(someText)
	}
	</script>
</body>

 <html>

что-же увидите на выходе ?
Цитата:
-MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection- ...
Ну и где-же асинхронный вызов ? хотя если бы код выполнялся асинхронно мы бы увидели:
Цитата:
-MainTheadInjection--MainTheadInjection--AsyncInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--AsyncInjection--MainTheadInjection--MainTheadInjection--MainTheadInjection--AsyncInjection- ...
Чувствуете разницу ?
проведите аналогичный эксперимент в NODE.js

Последний раз редактировалось RUVATA, 19.08.2011 в 09:02.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поведение hover в ИЕ7 ksa (X)HTML/CSS 7 27.05.2011 04:46
Странное поведение переменной mycoding Серверные языки и технологии 4 14.01.2011 19:18
Cтранное поведение viktod Общие вопросы Javascript 23 10.04.2010 00:37
Странное поведение replace cooli0 Общие вопросы Javascript 4 25.01.2010 17:16
Отменить поведение по умолчанию bool Общие вопросы Javascript 3 06.03.2009 16:59