当我使用 javascript 创建网站时,我是否有机会利用客户端计算机上的多个线程?
我知道网络编程可以让你访问多个异步 http 或网络请求。我想知道实际的浏览器内处理。
当我使用 javascript 创建网站时,我是否有机会利用客户端计算机上的多个线程?
我知道网络编程可以让你访问多个异步 http 或网络请求。我想知道实际的浏览器内处理。
有一些叫做“WebWorkers”的东西可以提供一定程度的并发性。它们通过类似于 Erlang 进程的消息传递范式与“正常”代码进行互操作(尽管没有那么复杂)。
这是一个新的 HTML5 东西,当然旧浏览器不支持。
Web Worker 是要走的路……它是一个 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 UI。可能现在已经修复了,但请注意。
Web Workers是一种技术。
Web 工作者——由万维网联盟 (W3C) 和 Web 超文本应用技术工作组 (WHATWG) 定义——是一个 JavaScript 脚本——从 HTML 页面执行——在后台独立运行也可能从同一 HTML 页面执行的其他用户界面脚本
参见MDN 上的用法:
Dedicated Web Workers 为 Web 内容在后台线程中运行脚本提供了一种简单的方法。创建后,工作人员可以通过将消息发布到创建者指定的事件处理程序来向生成任务发送消息。
有多线程 Web 编程,但没有多线程 javascript。
当 javascript 在客户端的浏览器中执行时,它会逐行解释,并且在执行时不会呈现任何内容。
您可以利用开源库来“模仿”多线程,但基本上每个 javascript 都需要一个页面来生存和运行。
一些技巧是传递长时间运行的函数以在 iframe 内运行,或者使用 setTimeout 函数一次做一些工作 50 毫秒,直到你用来跟踪工作的某个标志说工作完成了isFinished == true
最新版本的 Flash Player 允许在其中使用多线程,但仅限于跨单个域的非常基本的使用。
html 5 web workers是另一种选择,但不适用于所有浏览器