在后台线程中执行Javascript代码

时间:2014-03-26 16:39:58

标签: javascript multithreading cordova setinterval

Hiii大家, 我已经使用html创建了一个基于选项卡的应用程序,并且我已经使用 setInterval 来定期间隔后从服务器同步应用程序数据。但问题是,在同步数据时,如果我在标签之间切换,则执行代码会停止,因此无法完成同步。

我想在不同的线程中调用sync(),但无法获得任何帮助。关于如何实现这一点的任何想法,以便在选项卡之间切换时,我的JS代码继续执行。 我的JS代码的粗略结构是

setInterval(
sync();
,3000);

function sync()
{
// Code for sync data
}

2 个答案:

答案 0 :(得分:4)

您的示例的一个问题是,您只能一次执行sync(因为您在()调用中向其添加了setInterval。基本上你执行sync一次并传递结果。

另一个问题是;,它终止了这一行。

因此,删除括号和分号可能会解决您的问题:

setInterval(sync, 3000);

虽然我建议您使用超时而不是间隔 - 以防请求超过三秒。

function sync() {
    // Code for sync data

    setTimeout(sync, 3000);
}

sync();

总的来说,您的JavaScript使用事件循环在单个线程上执行,以按顺序执行所有事件。线程无论如何都无法解决您的问题,因为这是一个轻微的语法问题。

Web workers将允许浏览器中的其他线程,NodeJS也有一个线程机制 - 但应谨慎使用它们。

答案 1 :(得分:0)

您可能想要使用Web Workers

  

工作线程可以在不干扰用户界面的情况下执行任务。此外,他们可以使用XMLHttpRequest执行I / O(尽管responseXML和channel属性始终为null)。

您可以通过message与网络工作者沟通。作为一个想法,您可以在页面启动时生成单个工作程序,然后向其发送包含要上载的数据的消息。它会默默地在后台为你做。


另一个想法是使用Web Sockets。您的浏览器可以listen来自服务器的传入消息。服务器可以broadcast更新您的浏览器。