什么是 JavaScript 引擎

简单来讲,就是能够将 Javascript 代码处理并执行的运行环境。

JavaScript 语言是一种解释性脚本语言,因此在运行时,需要先将代码转变成抽象语法树,然后在抽象语法树上解释执行。

当然为了提高 js 的执行速度,同时随着 JIT (Just In Time)的技术引入,现在的 js 引擎大多会做一些性能优化,就是在执行前会将抽象语法树再转成一个中间表示(这个中间表示可能是字节码,也可能是直接转成本地代码)。这样就会极大的提高代码的执行速度。

不过 js 从抽象语法树转成中间表示的过程都是处在代码执行阶段的(解释性语言并不像编译性语言那样,编译和执行是分开的),所以在代码执行阶段进行额外的转换本身也是需要开销的。

综上描述,一个 JavaScript 引擎一般需要包括以下几个部分

  • 编译器。主要工作是将源代码编译成抽象语法树,在某些引擎可能还包含了将抽象语法树转换成中间表示(字节码)。
  • 解释器。在某些引擎中,解释器主要是接收字节码,解释执行这个字节码,同时也依赖垃圾回收机制等。
  • JIT 工具。一个能够 JIT 的工具,将字节码或者抽象语法树转换成本地代码。
  • 垃圾回收器和分析工具。它们负责垃圾回收和收集引擎中的信息,帮助改善引擎的性能和功效。

JavaScript 引擎和渲染引擎

之前在说 DOM 树的构建的时候,了解过在 HTML 解释器的工作过程中,可能会有 JavaScript 代码需要执行,而渲染引擎主要负责渲染页面。js 引擎提供调用接口给渲染引擎,以便让渲染引擎使用 js 引擎来处理 js 代码并获取结果。渲染引擎同时需要提供桥接接口让 js 可以访问 DOM。它们之间属于互相调用的关系。

什么是 JavaScript 引擎相关推荐

  1. V8 JavaScript引擎研究(三)垃圾回收器的实现

    V8垃圾回收机制简介 V8垃圾回收器的实现,是V8高效的一个非常重要的原因. V8在运行时自动回收不再需要使用的对象内存,也即是垃圾回收. V8使用了全暂停式(stop-the-world).分代式( ...

  2. JavaScript引擎大战:Google提出StrongMode和SoundScript议案,增强V8性能

    JavaScript 引擎性能大战硝烟迷漫,Chrome V8 引擎团队宣布了一个新的计划,在这个计划里他们介绍了两个新的虚拟机概念:强化模式(StrongMode)和强化脚本(StrongScrip ...

  3. JavaScript引擎V8 5.1遵循了更多的ECMAScript规范并支持WASM

    Google宣布了其5.1版本的V8 JavaScript引擎,这个版本提升了对ECMAScript 2017草案规范的支持,并为WASM提供了初步的支持,WASM是一个低层级的.轻便式的字节码,它致 ...

  4. java7 javascript引擎_Java7中脚本引擎的一般用法,共三种方法获得JavaScript引擎:名称、文件扩展名、MIME类型 | 学步园...

    package com.sino.java7; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; i ...

  5. JavaScript引擎研究与C、C++与互调用(转)

    本文转自:ice6015的专栏.为什么有些招聘需要熟悉JS和C++,这或许就是原因. 1.  概要 JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML ...

  6. Webkit 最新 Javascript 引擎领先 Chrome

    几周前 Google Chrome 发布之后,因其创新的 UI 以及出色的 JavaScript 执行效率而备受赞誉.最近,作为 Safari 与 Chrome 浏览器内核的 WebKit 发布了一个 ...

  7. Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎

    Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性. Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用D ...

  8. javascript引擎工作原理的初步了解

    From:https://segmentfault.com/a/1190000014242281 Javascript引擎是能运行javascript代码的程序或解释器.做为前端开发人员,了解java ...

  9. javascript引擎V8精要(1)

    V8是谷歌的开源高性能JavaScript和WebSimulink引擎,用C++编写.它用于铬和铜节点.js,等等.它实现了ECMAScript和WebAssembly,并在使用x64.IA-32.A ...

  10. javascript引擎执行的过程的理解--执行阶段

    一.概述 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 1.语法分析: 分别对加载完成的代码块进行语法检验 ...

最新文章

  1. TensorFlow官方入门实操课程-一个神经元的网络(线性曲线预测)
  2. ASP.NET Core Web API
  3. js获取checkbox值的方法
  4. SSM-1-SSM整合
  5. paip.指针 引用 c++ java的使用总结.
  6. golang ide 环境搭建_新手引导 — Golang后端开发环境搭建
  7. 完整详尽的解决MySql:Could not create connection to database server
  8. linux的ssh漏洞,Debian GNU/Linux Rssh安全绕过漏洞
  9. web作业之期末工程 “耀炎食品网站”
  10. SurfaceGo_BMR_41_1.011.2.zip恢复镜像网盘满速下载地址
  11. linux命令:nl命令
  12. 累进税率算法c语言,我国现行税制中运用的累进税率形式有( )。
  13. 【渝粤题库】广东开放大学 机电工程图样视图 形成性考核
  14. 《Multilingual Code-Switching for Zero-Shot Cross-LingualIntent Prediction and Slot Filling》论文研读
  15. xshell使用sftp命令总结
  16. PHP 2行代码完成 矩阵转换 数组维度转换
  17. 量子计算机相同数字相加怎么算,量子计算机如何分解两个质数乘积
  18. [SAP]JCO连接错误配置日志之错误用户或密码
  19. stick和stuck的区别_strike(struck)及stick (stuck)區別
  20. html文本框颜色填充颜色设置,PPT怎样给文本框填充颜色 PPT给文本框填充颜色的操作内容...

热门文章

  1. Oracle 常用命令总结
  2. 基于Oracle的SQL编程
  3. 【畅购商城】微信支付模块之微信支付二维码
  4. 谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信
  5. 将Latex tex文档转换成 word文档(上)
  6. 《FLUENT 14.0超级学习手册》——1.3 CFD软件的构成
  7. 【正点原子STM32连载】第五十三章 DSP测试实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  8. c语言读dbf文件格式,C语言直接读取FOXBASE的DBF文件
  9. C语言——初识字符串
  10. c primer plus(第五版)读书笔计 第二章(6)