浏览器仍然是单线程的吗
Are browsers still single-thread?
我听了Crockford关于Javascript(2006)的一个老讲座,他在谈论模型
Flow -> Paint
^ |
| v
Script <- Event
(一个涉及Flow、paint、event、script…的循环),表示"因为所有浏览器都是单线程的"。
所以,我的问题是,它们仍然是单线程的吗?
对于那些可能知道的人来说,这些视频讲座就所教授的内容而言仍然相关吗?
从技术上讲,是的,在前端生成页面和操作的过程中,它们仍然都在运行单个线程。有一些方法可以让它看起来像不是,并使用html5中引入的web工作者像伪多线程一样独立运行javascript进程。pseudo的意思是,它的工作方式与大多数多线程进程类似,它在时钟中断之间切换得如此之快,看起来就像是多线程的。有关网络工作者的更多信息,请访问http://www.w3schools.com/html/html5_webworkers.asp当然还有谷歌。
就要运行的JavaScript而言,是的。这通常不是问题,因为您打算在JavaScript中执行的任何可能需要超过一毫秒的操作都可以表示为"异步"操作(例如,AJAX请求、动画转换等)。这意味着您的代码所做的就是启动操作,并注册可能的回调以完成操作。
有一个"Web工作者"是有意义的,但很少有例外,但我从未真正见过这些应用。
浏览器是Design设计的多线程浏览器
在浏览器中,普通的javascript代码由单线程的javascript运行时执行。但是像chrome这样的浏览器使用WEB APIS,它有多个线程来使用事件循环异步处理阻塞操作(如setTimeout()、DOM、Ajax等)。
浏览器可能被视为单线程,因为它在一个线程中运行普通的javascript代码,但其他阻塞操作由多个线程处理。
请记住正常的javascript代码是在单个线程中处理的,即使它像forEach()那样被阻塞。如果你的程序中有一个forEach,javascript将无法执行任何操作,除非forEach()完成,但如果你定义setTimeout(),那么Web API将识别它并将其传递到隐藏线程上,因此它将被异步处理。
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 事件循环、回调队列和 Javascript 的单线程是如何连接的
- 浏览器仍然是单线程的吗
- 当javascript是单线程时,谁是onreadystatechange的调用者
- 重新审视网站优化的经验法则:JavaScript在现代浏览器中仍然是必不可少的
- 如何在JavaScript中强制执行单线程行为
- 节点JS单线程与多线程(CPU利用率:有什么区别吗?
- 调整图像大小以使其完美地适合幻灯片,问题仍然是用 for 循环将 CSS 代码替换为我的图像
- 单线程 Javascript 和 AJAX 处理
- 单线程 JavaScript 下的动画
- 为什么“使用严格”仍然是一个字符串字面
- 是JavaScript单线程的
- 既然JavaScript是单线程的,那么HTML5中的web工作者是如何进行多线程的呢
- 说JavaScript是“;单线程”;语言
- WinJS/Metro应用程序是单线程的吗?
- 如果javascript是单线程的,如何测量多个ajax调用的时间
- 当JavaScript是单线程的时候,Promises是如何工作的?
- 如果JavaScript(大部分)是同步的和单线程的,为什么while循环没有阻止进一步语句的执行
- javascript是如何单线程处理回调的
- JavaScript 是单线程的吗?如果没有,如何同步访问共享数据