JS运行机制详解

JS运行的环境是浏览器,浏览器是多进程的,每一个Tab页面都会多开一个进程,进程中可能包括主控进程(负责浏览器的显示,用户的前进和后退等行为),GPU,浏览器内核(浏览器渲染进程,负责页面渲染,脚本执行,事件处理)等 。

其中,浏览器内核是多线程的,包括

GUI渲染线程

JS引擎线程

JS事件触发线程

定时触发器线程

异步HTTP请求线程

可以知道,JS是单线程的,JS单线程的原因是JS主要是和用户进行交互的,也是可以操作DOM元素的,如果是多线程的话,一个线程对一个DOM元素进行修改,而另外一个线程对这个DOM元素进行删除,浏览器就不知道应该以哪个线程为准

单线程就意味着任务队列,所以任务都在一条线程上面执行,如果前面一个任务没有执行完毕,下面的任务都需要等待,就会造成阻塞发生,为了避免这种情况,JS有一套事件循环机制来应对。
这里写图片描述
同步任务会直接在主线程上面执行,让需要执行异步任务,比如需要发起一个AJAX异步请求,主线程会告诉异步HTTP请求线程,让异步HTTP请求线程去执行这个AJAX异步请求的任务,当HTTP请求线程执行完这个任务后,会把执行结果放在消息队列中,等到主线程的同步任务执行完毕了,去读取消息队列中的异步任务,执行异步任务的回调函数,这个过程是一个不断重复的。

相关推荐:

JavaScript运行机制之事件和回调函数

以上就是JS运行机制详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2781117.html

(0)
上一篇 2025年3月8日 16:13:14
下一篇 2025年2月23日 07:42:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS原生对象和正则表达式详解

    本文主要和大家分享JS原生对象和正则表达式详解,分别有字符串对象数组对象日期对象数学对象正则表达式,希望能帮助到大家。 希望能帮助到大家。 一、字符串对象 // charAt indexOf replace search subStr //…

    编程技术 2025年3月8日
    200
  • js如何判断邮箱格式是否正确

    本文主要和大家分享js如何判断邮箱格式是否正确,本文主要以代码的形式和大家分享,希望能帮助到大家。 登录后复制 function validate_required(field,alerttxt) { with (field) { if (…

    编程技术 2025年3月8日
    200
  • 深入理解javascript中this指针

    本文主要和大家分享深入理解javascript中this指针,在写java的时候,this用错了,idea都会直接报错! 比如…… 在面向对象编程里有两个重要的概念:一个是类,一个是实例化的对象,类是一个抽象的概念,用个形象的比喻表述的话,…

    2025年3月8日 编程技术
    200
  • JS和H5编写推箱子游戏

    推箱子小游戏是一款多年前很流行的小游戏(即使现在也有很多人玩),游戏目的很简单,就是人推箱子,把所有的箱子推到目的地,就游戏成功:看似跟简单的逻辑,其实还是有一定难度的,我也是依靠了别人的帮助才完成的,现在开始介绍如何用js,html5编写…

    2025年3月8日
    200
  • JavaScript和HTML5编写游戏Flappy Bird简易版

    上一篇文章我们和大家分享了JS和H5编写推箱子游戏,本文主要和大家分享用js和H5标签编写经典游戏:Flappy Bird 简易版,希望能帮助到大家。 声明:本人初学js和h5,本文涉及编写方式以及算法如有更好地改进,请各位大佬提出建议~ …

    2025年3月8日 编程技术
    200
  • JS数组去重方法总结

    本文主要和大家分享JS数组去重方法总结,一共有七种方法,希望能帮助到大家。 最简单的方法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var arr=[2,8,5,0,5,2,6,7,2]…

    编程技术 2025年3月8日
    200
  • node.js玩转进程实例

    本文主要和大家分享node.js玩转进程实例,node提供了child_process模块,我们再将经典的示例代码存为worker.js文件,如下: let http=require(‘http’);http.createServer(fu…

    2025年3月8日
    200
  • 常用的js读写文件排序详解

    最近写js发现很多规则跟自己想的不一样,毕竟刚上手不就,所以绕了很多弯弯,这里总结记录下,本文主要和大家分享常用的js读写文件排序详解,希望能帮助到大家。 1,由于file标签上传时:onchange方法在再次上传相同文件不在被触发 想要被…

    编程技术 2025年3月8日
    200
  • 通过js异步加载图片实现方法

    本文主要和大家分享通过js异步加载图片实现方法,主要是考虑到网络的限制,为了更好的用户体验,采用异步加载显示的方法为img加载图片,直接贴代码:  标签: 登录后复制登录后复制 js: function getHead(obj,portra…

    编程技术 2025年3月8日
    200
  • js如何制作简单的发布功能

    本文主要和大家分享js如何制作简单的发布功能,主要以代码的形式和大家分享,希望能帮助到大家。 代码如下: nbsp;html>                    demo                         .show…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论