Hi,

On Wed, Dec 16, 2009 at 11:04 AM, jez9999 <jez9...@gmail.com> wrote:

> It rather surprised me that one of the things I had to turn to a
> plugin for was a timer.  It seems like the kind of thing that would
> frequently be useful to have, abstracted to a nice jQuery interface,
> rather than using directly the rather ugly setTimeout function in
> Javascript.  Why not implement a timer interface in the jQuery core?
>

Well, there is *some* timer support in jQuery:
  jQuery.animate(..)
for repetitive tasks, which also greatly simplifies the
attribute-interpolation.
Note that you can supply a step-callback:
  jQuery.animate({},{step:function() {...}})

animate solves the chaining problem, too:
  $.animate(...task1...).animate(...task2...);

Though, the building-blocks for chaining are also exposed in the API as
  $.queue() and  $.dequeue()

In my experience, the problem one want to solve with timers is either so
simple, that a
  setInterval() / setTimeout()
already solves most of my problem, or it takes quite some code to make it
work.
In theses cases a timer framework (thats more than just a wrapper) would
have to provide A LOT of hooks, to cover all the use-cases --
or concentrate on a particular sort of tasks -- which is what $.animate()
does.

You could also then take this one step further and use 1ms one-off
> timers to implement multithreaded programming through jQuery, too.  I
> think this should work - a Javascript engine has to have the ability
> to do multithreading if several timers can callback over time whilst
> other JS code may be executing, right?  So we could have a timer and
> multithreads abstracted out nicely in the jQuery core.  Both would be
> nice.
>

To my knowledge, the current javascript engines behave(!) "single-threaded",
i.e. a timer, event, etc. is only fired when it is not currently executing
javascript code (from that window/tab/page). Specifically, it waits for the
execution-context to finish before doing even a setTimeout(fn,0). Because of
this most of the multi-threading problems like concurrent access,
dead-locks... currently don't happen, and all the code with events and
timers "just works". To introduce true multi-threading would either required
mutexes, etc.  or a synchronised data exchange (as done with
javascript-workers).
The only thing you could do is schedule one Task after the other. This is
what chaining and $.queue() already does.

At least this is my understanding of things -- if anyone know better, please
correct me...

  Tobias

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@googlegroups.com.
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en.


Reply via email to