当我使用javascript创建网站时,我是否有机会利用客户端计算机上的多个线程?
我知道网络编程可以让您访问多个异步http或网络请求。我对实际的浏览器内处理感到疑惑。
答案 0 :(得分:3)
有一些称为“WebWorkers”的东西提供了一定程度的并发性。它们通过传递范式的消息与“普通”代码互操作,类似于Erlang进程(虽然不那么复杂)。
这是一个新的HTML5事物,当然不支持旧的浏览器。
答案 1 :(得分:3)
网络工作者是要走的路...... 它是一个HTML 5功能,允许在客户端上运行多个线程(工作者)。此功能目前是一份工作草案。
您可以为页面启动任意数量的工作人员,并且每个工作人员都可以将其状态或结果“发布”到主线程。
查看此MDN帖子https://developer.mozilla.org/En/Using_web_workers
此外,SRN发布的链接也非常有用(http://www.html5rocks.com/en/tutorials/workers/basics/)
还要注意浏览器支持仍然不好。 http://caniuse.com/webworkers
如果您点击不受支持的浏览器,最好使用后备方法。另请注意,Chrome曾经有一个错误,网络工作者可以实际挂起Chrome用户界面。可能现在已经修好了,但请注意。
答案 2 :(得分:2)
Web Workers是技术。
Web工作者 - 由万维网联盟(W3C)和Web超文本应用技术工作组(WHATWG)定义 - 是一个JavaScript脚本 - 从HTML页面执行 - 在背景,独立于其他用户界面脚本,也可能是从同一个HTML页面执行的
另见usage on MDN:
专用Web Workers为Web内容提供了一种在后台线程中运行脚本的简单方法。创建后,工作人员可以通过将消息发布到创建者指定的事件处理程序来向生成任务发送消息。
答案 3 :(得分:1)
有多线程的Web编程,但没有多线程的javascript。
当javascript在客户端的浏览器中执行时,它会逐行解释,并且在执行时不会呈现任何内容。
你可以利用开源库来“模仿”多线程,但基本上每个javascript都需要一个页面来生存和运行。
一些技巧是将长时间运行的函数传递到iframe内部运行,或者使用setTimeout函数一次完成一些50毫秒的工作,直到你用来跟踪工作的一些标志表明工作完成了isFinished == true
最新版本的Flash播放器允许多线程,但仅限于单个域中的基本用法。
html 5网络工作者是另一种选择,但不适用于所有浏览器