Javascript中的守护程序线程

时间:2012-07-02 10:12:28

标签: javascript daemon getjson

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

谢谢! 马特

2 个答案:

答案 0 :(得分:4)

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

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

换句话说,JS引擎将尽力在所需的时刻执行您的代码,但只能在可以自由的情况下执行。

如果您不介意较旧的浏览器支持,可以使用 web worker ,它确实在单独的线程上运行。

网络工作者脚本

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);

(注意我在那里使用vanilla JS,而不是jQuery,因为我不知道在web worker中使用jQuery的任何方法。你可以导入脚本,但是jQuery引用window,web worker中的错误是它们与窗口或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分钟使用一名工人,我不确定。可能不是很多,因为在任何一种情况下都会有间隔。

答案 1 :(得分:0)

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

相关问题