没有web工作程序的Javascript后台处理

Javascript background processing without web worker?

本文关键字:后台 处理 Javascript web 工作程序 没有      更新时间:2023-09-26

我很确定,但只是想听听你的意见:

如果web工作人员不可用,是否可以在后台使用Javascript执行操作?是否存在"滥用"异步setTimeout()函数或其他机制的方法?我的目标是从localStorage中读取内容,进行一些转换并通过Ajax发送。

谢谢。

您不能在后台运行操作,但可以将其拆分为小块,并使用setTimeout运行下一部分。因此,浏览器将有时间呈现更改,并对正常操作做出响应,而您的长过程也将执行

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

Javascript中并没有真正的多线程,但您可以使用setTimeout(code, 0)异步运行代码。这会将函数排队以供执行。

在不使用web工作者的情况下,您所建议的(使用setTimeout)是唯一的方法,当然,在这一点上它根本不是真正的"背景"。请注意,每次启动"后台"代码时,都需要保持处理时间很短,因为它根本不是真正的后台代码;当您的代码运行时,页面将相当无响应(无响应的程度因浏览器而异,但页面上的任何JavaScript代码都必须等待函数调用完成)。

不,在Javascript中没有办法在后台做任何事情。它是严格的单线程。

您可以使用setTimeoutsetInterval在前台完成工作,但每次都只是其中的一小部分。这样,界面在处理突发工作之间的事件时仍然具有合理的响应性。