RE: Execute Last
"Ryan Hicks" <[email protected]> Tue, 21 Mar 2006 09:37:00 -0800
| Newsgroups | gmane.comp.web.dom.wdf |
|---|---|
| Message-ID | <[email protected]> |
Here's a quick question about using setTimeout to asynchronize execution, since we're on the topic. Recently, I've seen a lot of examples using 1ms for the time delay, but prior to about a year ago, most examples showed 0ms. Is there a functional difference? Did the community discover something about how the negligible delay improved performance over the nonexistent delay? Or is 1ms just more fashionable now and it's entirely a matter of personal choice? -ryan -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Moran Ben-David Sent: Tuesday, March 21, 2006 8:02 AM To: [email protected] Subject: RE: [wdf-dom] Execute Last Much thanks to you, Ian. I suppose you transposed my initial question to one that asks whether setTimeout results parallel execution or not. Your answer being "not". Given that, setTimeout is perfect for my case. That is, it is essentially like putting code at the end of the single execution thread. I reran my code and it works using 1ms. Thanks for taking the time to answer and reformulate my example. I greatly appreciate it! Moran > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf > Of Ian Petersen > Sent: Tuesday, March 21, 2006 9:48 AM > To: [email protected] > Subject: Re: [wdf-dom] Execute Last > > Hi Moran, > > > Does anyone know of a good way to delay execution of a piece of code > without > > relying on time (as in setInterval and setTimeout)? > > Can I ask why you're concerned about relying on time? > > In my experience, all browsers run Javascript in a single thread, > which means you can never have parallel execution, even if you use > setTimeout. So changing your code like this would do the trick: > > var lastExecutors = [] > var timeoutID = null > > function executeLast(o, f) { > lastExecutors.push([o, f]) > > if(!timeoutID) { > timeoutID = setTimeout(cycleLastExecutors, 1); > } > } > > function cycleLastExecutors() { > timeoutID = null; > > var task; > > while(lastExecutors.length > 0) { > task = lastExecutors.shift(); > > task[1].apply(task[0]); > } > } > > > With the above code, calling executeLast(foo, foo.last) will schedule > a call to foo.last() to be run 1 millisecond after the current thread > of execution terminates. Is one millisecond too long for your > application? > > Ian > > -- > Tired of pop-ups, security holes, and spyware? > Try Firefox: http://www.getfirefox.com > > > Unsubscribe > [email protected] > > List info > http://www.quirksmode.org/dom/list.html > Yahoo! Groups Links > > > > > Unsubscribe [email protected] List info http://www.quirksmode.org/dom/list.html Yahoo! Groups Links Unsubscribe [email protected] List info http://www.quirksmode.org/dom/list.html Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/wdf-dom/ <*> To unsubscribe from this group, send an email to: [email protected] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/