Mat*_*ack 2 javascript daemon getjson
我有一个程序,该程序使用getJSON从服务器获取JSON并处理此数据并将其呈现给用户。但是服务器上的数据经常更新。如何每隔5分钟获取新的JSON并将其显示给用户并在后台线程中执行?我可以为此使用setTimeout吗?
谢谢!马特
使用每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);
Run Code Online (Sandbox Code Playgroud)
(请注意,我在那里使用香草JS,而不是jQuery,因为我不知道在Web Worker中使用jQuery的任何方式。您可以导入脚本,但可以导入jQuery References 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'});
Run Code Online (Sandbox Code Playgroud)
我不确定每5分钟打电话给一位新员工是否有好处,或者像我一样,每隔5分钟使用一位工人并让其行动,是否有好处。可能不是很多,因为在任何一种情况下,都有一定的间隔。
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |