浏览器工作原理学习(十二)

news/2024/7/8 4:03:44

编译器和解释器

  • 按语言的执行流程,可以把语言划分为编译型语言和解释型语言。
  • 编译型语言:在程序执行前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次运行程序时,都可以直接运行该二进制文件,而不需要重新编译。
  • 解释性语言:在程序运行时每次都需要通过解释器对程序进行动态解释和执行。
  • 编译器工作流程:编译器依次对源代码进行词法分析、语法分析,生成抽象语法树(AST)——>词义分析生成中间代码——>代码优化生成二进制文件——>直接执行。
  • 解释器工作流程:解释器对源代码精选词法分析、语法分析,生成抽象语法树(AST)——>词义分析生成字节码——>解释执行。

v8引擎是如何执行一段JS代码的

  1. 生成抽象语法树(AST)和执行上下文
  • 分词(tokenize),又称词法分析,将源代码才接触一个个token(语法上不可能在分的、最小的单个字符或字符串)
  • 解析(parse),又称语法分析,将分词阶段生成的token数据,根据语法规则转化为AST。如果源代码中存在语法错误,这一步就会终止,并抛出一个"语法错误"。
  • 基于AST生成该段代码执行上下文。
  1. 生成字节码
  • 解释器根据AST生成字节码,并解释执行字节码。
  • 字节码是结于AST和机器码之间的一种代码,但是与特定类型的机器码无关,字节码需要通过解释器将其转换为机器码后才能执行。
  • 字节码可以减少系统的内存使用。
  1. 执行代码
  • 解释器会逐条解释执行字节码。
  • 如果一段代码被重复执行多次,会被定义为"热点代码",那么编译器会把这段热点的字节码编译为高效的机器码,当再次执行这段被优化的代码时,只需要执行编译后的机器码就可以了,从而大大提高代码的执行效率。
  • 即时编辑:解释器在解释执行字节码的同时,收集代码信息,当它发现某一部分代码变热之后,编译器会把热点的字节码转换为机器码,并把转换后的机器码保存起来以备下次使用。

JS性能优化

  • 优化JS执行效率,聚焦在单词脚本的执行时间和脚本的网络下载上
  1. 提升单次脚本的执行速度,编码JS的长任务霸占主线程,这样可以使得页面快速响应交互。
  2. 避免大的内联脚本,因为在解析HTML的过程中,解析和编译也会占用主线程。
  3. 减少JS文件的容量,因为更小的文件会提高下载速度,并且占用更低的内存。

http://www.niftyadmin.cn/n/2608623.html

相关文章

离线计算成本节省的神兵利器

摘要: 对于创业成长型的企业来说,离线计算已经必不可少了,通过离线计算我们可以生成复杂的业务报表,通过离线计算我们也能精确的算出用户画像。离线计算已经当今的企业中成为了不可或缺的存在。那么使用弹性计算能够对离线计算领域…

浏览器工作原理学习(十三)

消息队列和事件循环系统 消息队列 消息队列是一种数据结构,可以存放要执行的任务。它符合队列先进先出的特点。IO线程中的产生的新任务会添加进消息队列尾部。渲染主线程会循环地从消息队列头部中读取任务,执行任务。由于多个线程操作同一个消息队列&am…

浏览器工作原理学习(十四)

WebAPI:setTimeout 浏览器中的setTimeout 执行一段异步任务,需要先将任务添加到消息队列中。为了保证回调函数能在指定时间内执行,定时任务的回调函数不能直接添加到消息队列。延迟队列:维护消息队列中需要延迟执行的任务列表。如果当前任务…

(牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)

假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa,aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx,yyyy 其中a的Index为0&…

浏览器工作原理学习(十五)

微任务与宏任务 宏任务 为了协调任务在主线程上执行,页面进程引入消息队列和事件循环机制,渲染进程内部会维护多个消息队列,主线程从这些任务队列中取出任务执行,这写消息队列种的任务称为宏任务。 微任务 第一种:把…

django markdown

1. 编辑器 css 1 <link rel"stylesheet" href"{% static plugin/editor.md/css/editormd.css %}"> div 1 <div id"editormd" class"col-md-10 text-left"> 2 <textarea name&…

浏览器工作原理学习(十六)

请求陷入排队的几种情况 页面中的资源是有优先级的&#xff0c;比如CSS、HTML、JS等哦都是页面中的核心文件&#xff0c;所以优先级最高。而图片、视频、音频这类资源就不是核心资源&#xff0c;优先级就比较低&#xff0c;通常当后者遇到前者时&#xff0c;就需要让路&#x…

tidb 架构 ~Tidb学习系列(1)

一 简介:今天来研究Tidb 二 安装测试: 0 下载Tidb wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz 按如下步骤依次启动PD, TiKV, TiDB 1 启动pd 这里如果无法启动,大概率是2379端口被占用,极大可能是redis服务 nohup ./bin/pd-server --data-dirpd --lo…