From:https://segmentfault.com/a/1190000014242281

Javascript引擎是能运行javascript代码的程序或解释器。做为前端开发人员,了解javascript底层的工作原理,可以用助于写出高效的javascript代码。那我们就来看一下,我们写的代码是如何在javascript引擎中运行的。

javascript引擎如何解释执行javascript代码

大家都知道javascript属于解释型语言,所谓解释型语言就是引擎直接读取源码,然后出结果,这样做效率非常低。相对的大家都知道C++代码执行很快,因为C++属于编译型语言,所谓编译型语言就是把源代码编译成可执行程序后才可以运行,C++就是把源代码编译成本地代码后执行的。编译的过程没有时间要求,所以在编译的过程中可以做更多的优化,生成执行更快的代码。

下面我们先来看一下早期JavaScript引擎的执行过程:

再看一下C++语言的编译过程:

开发人员开发完源代码后,使用编译器将源代码编译成本地代码(机器码/汇编代码), 用户只是使用编译后的本地代码,这些本地代码被系统加载器加载后,由操作系统调度CPU直接执行。因为经过编译器源代码被编译成了本地代码,可以由操作系统直接执行,所以它的执行速度飞快。

我们再来看一下另一个老牌语言——Java的运行过程。Java代码的运行明显的分成两个阶段,也就是编译阶段和运行字节码阶段。它首先由编译器编译成.class(字节码)文件,然后再通过JVM(Java虚拟机)从.class文件中读一行解释执行一行。也正是由于不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。

在这里在给大家介绍一下字节码和本地代码的区别:

  1. 字节码是跨平台的一种中间表示,该字节码与平台无关,需要借助虚拟机解释执行
  2. 本地代码与操作系统有关,不同的操作系统编译成的本地代码不同

既然Java的执行过程是使用解释器执行字节码,这样肯定比C++直接执行本地代码速度上要慢,为了解决执行的性能问题,Java引入了一个特别NB技术 —— JIT(Just-In-Time)。这个为啥NB呢,因为它的主要作用就是解决解释性语言的性能问题。哈哈^^! 这个技术的主要思想是当解释器解释代码时,不仅仅解释字节码,而且将其中一些字节码(主要是使用率高的部分)转成本地代码,这样就可以被CPU直接执行,从而极大地提高性能。这个技术被广泛地使用在各种语言的执行环境中,如Java虚拟机,JavaScript的众多引擎中。

随着JavaScript越来越受欢迎,JavaScript引擎也在不断的向前辈学习,努力提高Javascript执行速度。我们来看一下现在的JavaScript引擎的执行过程:

在现在JavaScript引擎中,大致的执行过程是:

编译器将源代码编译成抽象语法树,再将抽象语法树编译成字节码;解释器来接收字节码,解释执行这些字节码;JIT工具,分析这些字节码并将其中的部分字节码转换成本地代码。

这个过程和Java的编译和执行过程很像,只是Java语言中这两个阶段是分开执行的,编译阶段可以尽可能的生成高效的字节码,这样在执行阶段可以执行的更快。而对于Javascript而言,它的编译阶段是在网页和JavaScript文件下载后同执行阶段一起在网页的加载和渲染过程中来实施的,所以对于JavaScript引擎执行过程中的每个阶段时间越少越好。

javascript引擎工作原理的初步了解相关推荐

  1. JavaScript引擎工作原理解析

    JavaScript引擎是什么 想知道JavaScript引擎是什么,首先要知道JavaScript(简称js)是什么,相信对于屏幕前的你来说,js是干什么的已经不用再多说,但还是有必要介绍下Java ...

  2. JavaScript的工作原理

    在学习Web前端的时候,有很多重要的知识点需要我们深刻理解并掌握实际运用场景.例如,JavaScript是Web前端人员必须要掌握的知识点之一,下面,为大家全面介绍JavaScript的工作原理,希望 ...

  3. Javascript 引擎工作机制(js层面梳理)

    转载地址:http://www.jb51.net/article/98610.htm 我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等,这些概念正是J ...

  4. Java执行引擎工作原理:方法调用

    Java执行引擎工作原理:方法调用 方法调用如何实现 函数指针和指针函数 CallStub源码详解 Git链接(有HotSpot源码) 1 方法调用如何实现 计算机核心三大功能:方法调用.取指.运算 ...

  5. JavaScript的工作原理:内存管理+如何处理4个常见的内存泄漏

    本篇译文,删减了原文中一些无关紧要的内容,可以让大家花更少的阅读时间. 原文地址:https://blog.sessionstack.com/how-javascript-works-memory-m ...

  6. 干货:浏览器渲染引擎Webkit和V8引擎工作原理

    浏览器的历史 W3C在80年代后期90年代初期发明了世界上第一个浏览器WorldWideWeb(后更名为Nexus),支持文本/简单的样式表/电影/声音和图片 1993年,网景(netscape)浏览 ...

  7. Java规则引擎工作原理及其应用

    摘 要 Java规则引擎是一种嵌入在Java程序中的组件,它的任务是把当前提交给引擎的Java数据对象与加载在引擎中的业务规则进行测试和比对,激活那些符合当前数据状态下的业务规则,根据业务规则中声明的 ...

  8. (转)浅谈dedecms模板引擎工作原理及自定义标签

    理解织梦模板引擎有什么意义?一方面可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步.理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式. 这似乎 ...

  9. smarty模板引擎工作原理

    1.模板引擎是什么 展示给用户的页面由数据及承载数据的标签组成,标签就是html,而数据就是由php处理的变量,这样就涉及到了前端和后端的交互,模板引擎就是将php代码与html代码分离的技术. sm ...

最新文章

  1. 2021年大数据Hadoop(十一):HDFS的元数据辅助管理
  2. Netty笔记(八) Bootstrap
  3. java中join的使用
  4. 数据可视化【五】 Scatter Plot
  5. 为什么要使用数据连接池
  6. IIS中部署vue程序,刷新直接404
  7. 程序员经常看的开源月刊《HelloGitHub》第 57 期
  8. 【MySQL】MySQL 查看数据库表列表的3种方式
  9. RTOS原理与实现13(完):内核裁剪与移植
  10. PyTorch——深度神经网络的写作笔记
  11. 干了这杯可乐!Gulp 上手指南
  12. Android Socket编程【转】http://duguyidao.iteye.com/blog/1069736
  13. 寻找复活节彩蛋egg huting 学习
  14. easyexcell导出专题
  15. 诊所 金卫系统 青岛_金卫体检信息管理系统
  16. android 在线获取音乐歌词lrc文件
  17. 三十二、http与www服务介绍
  18. linux命令—文件压缩解压缩
  19. 可以搜索相似网站的网站
  20. 如何设计IIR滤波器

热门文章

  1. SpringBoot集成WebSocket,实现后台向前端推送信息
  2. 每日一皮:周末到了,我以为我能休息一下
  3. 大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?
  4. php5.2的配置方,Windows IIS PHP 5.2 安装与配置方法
  5. asp.net oracle优化,[转]ASP.NET性能优化
  6. can‘t convert cuda:0 device type tensor to numpy
  7. python for循环删除
  8. pytorch 忽略层权重
  9. could not export python function call python_value. Remove calls to Python functions before export
  10. 用于CUDA FFT的PyTorch包装器pytorch-fft