Since ajax, a lot of people are thinking that asynchrone means “in a separated thread”. They are wrong!

Synchronous

The XMLHttpRequest object gives you the option to make a synchronous request to a server with the parameter async set to false. It means that when you call the server, all javascript executions will stop and wait for the server to respond to the request. I never saw it used. In fact it is more confusing that anything else because the page seems frozen and users don't like frozen things. If you use it, you are not cool!

Asynchronous

Now you are being cool! The asynchronous is used by everyone and it doesn't freeze the page while the call to the server is done. So, if you have a call that takes 30 seconds before receiving the answer, your users will never know that you're a bad server-side coder that do not optimize the code he's writing (I'm just joking).

The misconception of asynchronous

People take for granted that because it's asynchronous, it's a thread. They are partially right. There must be a thread created by the browser to keep the javascript running while it makes a request to the server. It's internal and you don't have access to that thread. But, the callback function called when the server responds to the ajax request is not in a thread.

I'll explain clearer. If javascript runs some code that takes 5 seconds to execute and an ajax response arrives at 2 seconds, it will take 3 seconds before it will be executed (before the callback function is called). That's because javascript itself doesn't create a thread to execute the ajax response from the server and simply waits that all executions are terminated before starting a new one.

So if you're running a lot of ajax requests simultaneously, you might get some weird behavior because they will all wait one on another before executing themselves.

UPDATE 2007-06-12

Following one of my readers comment (BK), I have written a sequel to this article : Ajax, javascript and threads : the final truth.

comments powered by Disqus