如果Javascript不是multithreading的,有没有理由实现异步Ajax队列?
我的php服务器有问题(我的电脑是唯一的连接)。 我最初认为部分原因是因为太多的ajax请求(我有一个脚本,每次击键执行一个ajax请求)所以我实现了一个设计来控制ajax请求流入队列。 以下是我的代码:
//global vars: activeAjaxThread = 0; //var describing ajax thread state ajaxQue = []; //array of ajax request objects in queue to be fired after the completion of the previous request function queRequest(ajaxObj) { ajaxQue.push(ajaxObj); if (activeAjaxThread == 0) { fireOffAjaxQue(); } else { return 'ajax thread is running'; } } function fireOffAjaxQue () { activeAjaxThread = 1; //getLastRequest(); if ((ajaxQue.length > 0) && activeAjaxThread == 1) { $.ajax(ajaxQue[0]).always( function () { ajaxQue.shift(); if (ajaxQue.length > 0) { fireOffAjaxQue(); //fire off another ajax request since this one has been completed. } }); } activeAjaxThread = 0; //thread has finished executing }
执行:
//create ajax object var ajaxObj = { url: 'someplace.php', data: dataVar, success: function (data) {...} }; //send ajax object to que queRequest(ajaxObj);
然后我发现Javascript是multithreading的,并且阅读了一些关于Javascript事件处理的文章,例如http://ejohn.org/blog/how-javascript-timers-work/作者John Resig(jQuery extra-ordinaire) )
在这种情况下,由于Javascript已经排队我的请求,我在这里提出的function不会产生任何结果吗? 奇怪的是它似乎彻底改变了它。 我的服务器崩溃较少,( 并不是认为它在任何想象中都是 一个解决方案 ……唉),在它崩溃并重新启动之后,先前排队的ajax请求被发送,而早些时候它们似乎都被立即发送并在服务器崩溃时消失得无影无踪。
如果是单线程的Javascript,则将异步事件排队:
- 有一个Ajax请求管理器或队列是否有任何意义?
- 为什么我的代码会产生任何结果?
Javascript是单线程的,但是一旦发送了AJAX请求,它就是javascript的手,可以这么说。 这是AJAX的异步部分。 发出请求,然后代码继续。 然后,当收到响应时,它将被处理。 请求不排队。