Javascript中的守护线程

Javascript中的守护线程,javascript,daemon,getjson,Javascript,Daemon,Getjson,我有一个程序,它使用getJSON从服务器获取JSON并处理这些数据,然后将其呈现给用户。但是服务器上的数据每隔一段时间就会更新一次。如何每5分钟获取一次新的JSON,并将其显示给用户,然后在后台线程中执行?我可以使用setTimeout吗 谢谢! Matt是的,您可以使用setTimeout(或者setInterval,如果您希望它无休止地运行的话)提取数据。 我认为这是更好的选择…使用每5分钟触发一次的间隔是显而易见的(也是最兼容浏览器的)方法 这不会创建单独的线程,而是传统的模拟方式。实际

我有一个程序,它使用getJSON从服务器获取JSON并处理这些数据,然后将其呈现给用户。但是服务器上的数据每隔一段时间就会更新一次。如何每5分钟获取一次新的JSON,并将其显示给用户,然后在后台线程中执行?我可以使用setTimeout吗

谢谢!
Matt

是的,您可以使用
setTimeout
(或者
setInterval
,如果您希望它无休止地运行的话)提取数据。
我认为这是更好的选择…

使用每5分钟触发一次的间隔是显而易见的(也是最兼容浏览器的)方法

这不会创建单独的线程,而是传统的模拟方式。实际发生的只是异步事件排队,在尽可能接近您规定它应该运行的时间点执行。但是,精度不能保证,因为它运行在同一个线程上,所以它需要在JS引擎的执行中有一个“机会窗口”

换句话说,JS引擎将尽最大努力在所需时刻执行您的代码,但前提是它可以自由执行

如果您不介意旧的浏览器支持,您可以使用一个真正在单独线程上运行的

网络工作者脚本

self.addEventListener('message', function(evt) {
        var gateway = new XMLHttpRequest();
        var intie = setInterval(function() {
        gateway.open("GET",evt.data.load_url,true);
        gateway.send();
        gateway.onreadystatechange = function() {
            if (gateway.readyState==4 && gateway.status==200)
                self.postMessage(gateway.responseText);
        }
   }, 300000); //every 5 minutes
}, false);
var worker = new Worker('worker.js');
worker.addEventListener('message', function(evt) {
    //the loaded JSON data is now held in evt.data
    alert(evt.data);
}, false);
worker.postMessage({load_url: 'json.txt'});
(注意,我在那里使用的是vanilla JS,而不是jQuery,因为我不知道在web workers中使用jQuery的任何方法。您可以导入脚本,但jQuery引用了
窗口
,这在web workers中是错误的,因为它们与窗口或DOM没有任何关联)

主JS脚本

self.addEventListener('message', function(evt) {
        var gateway = new XMLHttpRequest();
        var intie = setInterval(function() {
        gateway.open("GET",evt.data.load_url,true);
        gateway.send();
        gateway.onreadystatechange = function() {
            if (gateway.readyState==4 && gateway.status==200)
                self.postMessage(gateway.responseText);
        }
   }, 300000); //every 5 minutes
}, false);
var worker = new Worker('worker.js');
worker.addEventListener('message', function(evt) {
    //the loaded JSON data is now held in evt.data
    alert(evt.data);
}, false);
worker.postMessage({load_url: 'json.txt'});
每5分钟给一个新员工打一次电话,或者像我一样,使用一个员工,让它每5分钟行动一次,是否有任何好处,我不确定。可能不会太多,因为在这两种情况下,都有一段时间间隔。

是的
setTimeout
(甚至
setInterval
)就是这样做的方法。