博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS引擎执行机制
阅读量:6377 次
发布时间:2019-06-23

本文共 634 字,大约阅读时间需要 2 分钟。

1. 前言

  1. 众所周知,JS的执行环境是单线程的,(这个线程就是浏览器的JS引擎),一次只能执行做一件事情;这种方式的缺点就是如果需要进行一些耗时的操作的话,会阻塞,降低用户体验;从而setTimeout(),setInterval(),ajax,onClick()等这种异步操作应运而生;
  2. 这时,你也许会误认为以上的这几个异步操作,就使得JS引擎具有了多个线程;答案是错的,JS引擎仍然是单线程的,是浏览器内核实现了多个线程异步执行,这些线程在内核的控制下相互配合从而保持同步;

那么问题来了,JS引擎是如何配合浏览器处理这些定时器回调和事件的呢?那就需要了解浏览器内核的工作原理了;

2. 浏览器内核工作原理

  1. 浏览器的线程

  • 这些异步线程会产生不同的异步事件;
  1. 工作原理

  • JS引擎是基于事件驱动的;(浏览器派给的任务)
  • 以上的任务可以来自如下callbackFn:
    • 界面元素鼠标点击事件;
    • 定时触发器时间到达通知;
    • 异步请求状态变更通知;
  • JS引擎一直等待任务队列中的任务到来,且由于JS的单线程,这些任务需要排队进行处理 (任务队列)

相信上述内容看过之后,对于JS内核执行原理,已经有了深刻的印象。另外关于这个任务队列的执行,请参看我的另外一篇文章

参考资料: https://www.cnblogs.com/hksac/p/6596105.html http://www.ruanyifeng.com/blog/2014/10/event-loop.html

你可能感兴趣的文章
Windows多线程
查看>>
Resolve PSExec "Access is denied"
查看>>
C语言局部变量和全局变量问题汇总
查看>>
android 下的网络图片加载
查看>>
Paip.语义分析----情绪情感词汇表总结
查看>>
Linux下软件安装,卸载,管理
查看>>
View Programming Guide for iOS_读书笔记[正在更新……]
查看>>
排查VMWare虚拟机的性能问题
查看>>
yum安装Apache Web Server后各个文件存放位置
查看>>
一些基础密码算法的实现
查看>>
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
查看>>
Android于JNI调用列出的程序
查看>>
CSS3-border-radius 属性
查看>>
相似图片搜索的原理(二)(转)
查看>>
(转)Spring并发访问的线程安全性问题(高度总结)
查看>>
解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题
查看>>
TextBox 英文文档
查看>>
linux系统调用函数---12
查看>>
C#开发SQLServer的Geometry和Geography存储
查看>>
GPUImage API文档之GPUImageInput协议
查看>>