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