浏览器与JavaScript引擎原理
文章平均质量分 97
mxydl2009
这个作者很懒,什么都没留下…
展开
-
浏览器中的JavaScript执行机制
执行上下文变量提升在JavaScript代码执行时,JavaScript引擎把变量和函数的声明提升到代码开头的“行为”,提升后的变量会设置默认值undefined,函数声明是有值的。变量提升发生在JavaScript的编译阶段。JavaScript的执行流程JavaScript代码会经过编译后再执行编译阶段生成执行上下文生成可执行代码执行上下文之环境变量JavaScript执行一段代码时的运行环境,保存代码执行时的变量环境、词法环境、外部执行上下文outer和this。比如调用函原创 2020-07-26 12:43:32 · 534 阅读 · 0 评论 -
JavaScript语言层面的优化
JavaScript优化内存管理高级语言自带垃圾回收机制如果不注意内存管理,可能会导致内存泄漏问题。内存管理:开发者主动申请空间、使用空间和释放空间。JavaScript中并未提供相应的API,由执行引擎根据语言来执行内存管理操作。申请空间let obj = {};使用空间obj.name = 'foo';释放空间obj = null;垃圾回收与常见GC算法垃圾回收程序执行时,会阻塞JavaScript的执行。两种对垃圾的判断:对象不再被引用时,称为垃圾对象不能从根上访问原创 2020-06-30 21:00:11 · 192 阅读 · 0 评论 -
浅谈浏览器内核线程
浏览器内核是多线程的,各个线程互相配合,常驻线程如下:GUI渲染线程负责对HTML文档的渲染,当发生重绘或者回流时,GUI线程就会执行。当JS引擎线程执行时,GUI线程会被挂起,两者互斥。JavaScript引擎线程用于执行JavaScript脚本。单线程,与GUI线程互斥。定时器线程单独用于计时的线程。事件触发线程当一个事件被触发时该线程会把事件处理函数添加到任务队列的队尾,等...原创 2019-06-28 19:04:32 · 300 阅读 · 0 评论 -
JS的事件循环机制
JS的异步操作来源于浏览器提供的异步API,以及事件循环机制,回调函数队列(或者叫task queue,任务队列)。事件循环机制循环往复地监测JS调用栈和任务队列,一旦调用栈为空,且任务队列中有回调函数,就会将回调函数丢入调用栈中执行。为了得到一个顺畅的UI界面,耗时操作应该写成异步形式,因为重绘操作必须是调用栈为空的情况下(即没有JS代码执行)。原创 2019-06-28 14:40:10 · 1626 阅读 · 0 评论 -
浏览器重排和重绘触发情况
浏览器渲染引擎解析HTML文档形成DOM树,解析CSS文档形成样式规则,DOM树和样式规则结合形成渲染树,然后开始绘制。渲染树需要重新分析且节点尺寸需要重新计算就称为重排。节点的几何属性或者样式发生变化就称为重绘。任何改变渲染树构建信息的行为都会导致重排或者重绘。如:添加、删除、更新DOM节点通过display: none隐藏一个DOM节点-触发重排和重绘通过visibility: hid...原创 2019-07-04 16:07:13 · 963 阅读 · 0 评论