Каждую следующую myFunction вызывать через setTimeout
|
здесь представлен список свойств обращение к которым вызывает немедленный redraw элемента:
1. offsetTop, offsetLeft, offsetWidth, offsetHeight, 2. scrollTop/Left/Width/Height, 3. clientTop/Left/Width/Height, 4. getComputedStyle() или currentStyle в IE. ...фактически в IE8 100% работают только 1-ые... На одном из англ.форумов вычитал Цитата:
|
Цитата:
Дело было в баге самого IE : пока идет непосредственная работа с COM-компонентами в моем случае ActiveX, IE для повышения производительности отключает все вcтроенные redraw / reflow... хочешь что-то отрисовать - вызывай его принудительно. ("как?" - постом выше) |
И так окончательная точка
JavaScript у клиента в данный момент (не берем в расчет Web Workers которые еще "будующее") не выполняется асинхронно никак. setTimeout и setInterval - вопреки рефу, псевдоасинхронность т.е. управление не совмещает выполнение кодов разных функций за один такт... |
Цитата:
|
********************
|
Цитата:
а ассинхронность(в браузерном JS) - явление строго однопоточное. ассинхронность позволяет положить функции в очередь, до наступления события, когда они смогут выполниться. При этом они вовсе не обязаные выполнятся одновременно, и даже не гарантируется что они выполнятся в указанном вами порядке(в случае когда они должны сработать "одноврменно"). |
Вам как JavaScript-ерам должна быть знакома технология серверного JavaScript - NODE.js, вот здесь часть идеологии асинхронности...
Более того, не хотел бы с вами спорить, но видимо вы заблуждаетесь... Цитата:
Т.е. по наступлению события или таймера, исполнение текущего контекста приостанавливается, и исполняется контекст назначенный, после чего возобновляется выполнение текущего... В нашем-же случае setTimeout и setInterval являются таймерами, но они не останавливают выполнение основного контекста, а покорно ждут пока контекст исполнится... |
Цитата:
Цитата:
|
вот некий код для "разбора полетов"
<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> что-же увидите на выходе ? Цитата:
Цитата:
проведите аналогичный эксперимент в NODE.js :) |
Часовой пояс GMT +3, время: 23:11. |