JavaScript 中的守护线程

2024-03-01

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

谢谢! 马特


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

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

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

如果您不介意较旧的浏览器支持,您可以使用网络工作者 http://www.html5rocks.com/en/tutorials/workers/basics/,它确实在单独的线程上运行。

网络工作者脚本

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 Workers 中使用 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 分钟执行一次是否有任何好处。可能不会太多,因为无论哪种情况,都会有一个间歇期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的守护线程 的相关文章

随机推荐