2012-01-26 36 views
2

我对此相当肯定,但只是有您的意见:没有web worker的Javascript后台处理?

如果Web工作人员不可用,是否可以用Javascript在后台执行操作? 是否有可能“滥用”异步功能或其他一些机制? 我的目标是从localStorage中读取内容,做一些转换并通过Ajax发送。

谢谢。

回答

1

不使用网络工作者,你认为(使用setTimeout)什么是做到这一点的唯一方法,当然它不是真正的“背景”在所有的在这一点上。请注意,每次启动“后台”代码时,您都需要保持处理的时间很短,因为它根本不是真正的后台代码;当你的代码正在运行时,页面将会非常没有响应(它的无响应程度会因浏览器而异,但页面上的任何JavaScript代码肯定会等待你的函数调用完成)。

2

是不是真的多线程在Javascript,但你可以使用异步运行setTimeout(code, 0)代码。这将队列执行的功能。

+0

好的执行,但是这意味着如果代码是在未来jQuery的一个点上运行基于UI的用户界面将在那时被阻止,对吧? – ceran

1

没有,有没有办法做到在JavaScript中的背景什么。它严格地是单线程的。

您可以使用setTimeoutsetInterval来完成前台的工作,但每次只做一小部分工作。这种方式界面仍然是相当敏感的,因为它处理你的工作爆发之间的事件。

3

你不能在后台运行操作,但你可以在一小块一小块把它分割,并运行的setTimeout每一个部分。作为结果,浏览器将有时间来呈现的变化,将响应正常的行为,而你的长期过程,以及

function iteration(){ 
    do_some_small_amount_of_work(); 
    if (!not_finished) 
     scheduler.setTimeout(iteration, 1); 
} 
+0

还要感谢你3个人。 – ceran