这是一个经过深思熟虑的设计决定,还是我们现在的浏览器存在问题,这些问题将在future 的版本中得到纠正?

推荐答案

JavaScript不支持多线程,因为浏览器中的JavaScript解释器是单线程(AFAIK).即使谷歌浏览器也不会让单个网页的JavaScript同时运行,因为这会在现有网页中造成大量并发问题.Chrome所做的只是将多个组件(不同的选项卡、插件等)分离到不同的进程中,但我无法想象一个页面有多个JavaScript线程.

但是,您可以按照建议使用setTimeout来允许某种调度和"假"并发.这会导致浏览器重新获得对呈现线程的控制,并在给定的毫秒数之后启动提供给setTimeout的JavaScript代码.如果您希望在对视口执行操作时允许刷新视口(您看到的内容),这将非常有用.只需循环通过例如坐标并相应地更新元素,您只会看到开始和结束位置,而不是介于两者之间的任何位置.

我们在JavaScript中使用一个抽象库,它允许我们创建由同一个JavaScript解释器管理的进程和线程.这允许我们以以下方式运行操作:

  • 进程A,线程1
  • 进程A,线程2
  • 进程B,线程1
  • 进程A,线程3
  • 进程A,线程4
  • 进程B,线程2
  • 暂停进程A
  • 进程B,线程3
  • 进程B,线程4
  • 进程B,线程5
  • 启动流程A
  • 线程5,一个进程

这允许某种形式的调度和伪并行、线程的启动和停止等等,但它不是真正的多线程.我认为它永远不会在语言本身中实现,因为真正的多线程只有在浏览器可以运行单页多线程(甚至多个核心)时才有用,而且困难远远大于额外的可能性.

关于JavaScript的future ,请查看以下内容:

Javascript相关问答推荐

基于变量切换隐藏文本

MongoDB中的引用

用JavaScript复制C#CRC 32生成器

配置WebAssembly/Emscripten本地生成问题

使用Java脚本根据按下的按钮更改S文本

在执行异步导入之前判断模块是否已导入()

提交链接到AJAX数据结果的表单

在我的index.html页面上找不到我的Java脚本条形图

如何在Node.js中排除导出的JS文件

钛中的onClick事件需要在两次点击之间等待几秒钟

如何 for each 输入动态设置输入变更值

判断函数参数的类型

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

重新呈现-react -筛选数据过多

我怎样才能得到一个数组的名字在另一个数组?

FindByIdAndUpdate在嵌套对象中创建_id

我的NavLink活动类在REACT-ROUTER-V6中出现问题

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

将延迟加载的模块转换为Eager 加载的模块

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的