在Javascript守护线程(Daemon Thread in Javascript)

2019-10-16 23:07发布

我有一个程序,使用的getJSON从服务器获取JSON和处理这些数据,并将其呈现给用户。 但是,服务器上的数据被经常更新一次。 我怎样才能得到新的JSON每隔5分钟,并显示给用户,并做一个后台线程? 我可以使用的setTimeout这个?

谢谢! 马特

Answer 1:

使用每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);

(请注意我用的香草JS那里,没有jQuery的,因为我不知道的使用jQuery网络工作者中的任何方式,你可以导入脚本,但jQuery的参考window ,它在网络工作者错误,因为他们没有任何关系窗口或DOM)

主要JS脚本

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分钟行事的任何好处,我不知道。 也许不是很多它,因为,在这两种情况下,有事情的间隔。



Answer 2:

是的,你可以拉与数据setTimeout (或setInterval ,如果你希望它无休止地运行)。 我认为这是你更好的选择?



文章来源: Daemon Thread in Javascript