javascript引擎工做原理的初步瞭解

Javascript引擎是能運行javascript代碼的程序或解釋器。作爲前端開發人員,瞭解javascript底層的工做原理,能夠用助於寫出高效的javascript代碼。那咱們就來看一下,咱們寫的代碼是如何在javascript引擎中運行的。javascript

javascript引擎如何解釋執行javascript代碼

你們都知道javascript屬於解釋型語言,所謂解釋型語言就是引擎直接讀取源碼,而後出結果,這樣作效率很是低。相對的你們都知道C++代碼執行很快,由於C++屬於編譯型語言,所謂編譯型語言就是把源代碼編譯成可執行程序後才能夠運行,C++就是把源代碼編譯成本地代碼後執行的。編譯的過程沒有時間要求,因此在編譯的過程當中能夠作更多的優化,生成執行更快的代碼。前端

下面咱們先來看一下早期JavaScript引擎的執行過程:java

圖片描述

再看一下C++語言的編譯過程:工具

圖片描述

開發人員開發完源代碼後,使用編譯器將源代碼編譯成本地代碼(機器碼/彙編代碼), 用戶只是使用編譯後的本地代碼,這些本地代碼被系統加載器加載後,由操做系統調度CPU直接執行。由於通過編譯器源代碼被編譯成了本地代碼,能夠由操做系統直接執行,因此它的執行速度飛快。性能

咱們再來看一下另外一個老牌語言——Java的運行過程。Java代碼的運行明顯的分紅兩個階段,也就是編譯階段和運行字節碼階段。它首先由編譯器編譯成.class(字節碼)文件,而後再經過JVM(Java虛擬機)從.class文件中讀一行解釋執行一行。也正是因爲不一樣的操做系統有不一樣的JVM,因此實現了真正意義上的跨平臺。學習

圖片描述

在這裏在給你們介紹一下字節碼和本地代碼的區別:優化

  1. 字節碼是跨平臺的一種中間表示,該字節碼與平臺無關,須要藉助虛擬機解釋執行
  2. 本地代碼與操做系統有關,不一樣的操做系統編譯成的本地代碼不一樣

既然Java的執行過程是使用解釋器執行字節碼,這樣確定比C++直接執行本地代碼速度上要慢,爲了解決執行的性能問題,Java引入了一個特別NB技術 —— JIT(Just-In-Time)。這個爲啥NB呢,由於它的主要做用就是解決解釋性語言的性能問題。哈哈^^! 這個技術的主要思想是當解釋器解釋代碼時,不單單解釋字節碼,並且將其中一些字節碼(主要是使用率高的部分)轉成本地代碼,這樣就能夠被CPU直接執行,從而極大地提升性能。這個技術被普遍地使用在各類語言的執行環境中,如Java虛擬機,JavaScript的衆多引擎中。spa

隨着JavaScript愈來愈受歡迎,JavaScript引擎也在不斷的向前輩學習,努力提升Javascript執行速度。咱們來看一下如今的JavaScript引擎的執行過程:操作系統

圖片描述

在如今JavaScript引擎中,大體的執行過程是:code

編譯器將源代碼編譯成抽象語法樹,再將抽象語法樹編譯成字節碼;解釋器來接收字節碼,解釋執行這些字節碼;JIT工具,分析這些字節碼並將其中的部分字節碼轉換成本地代碼。

這個過程和Java的編譯和執行過程很像,只是Java語言中這兩個階段是分開執行的,編譯階段能夠儘量的生成高效的字節碼,這樣在執行階段能夠執行的更快。而對於Javascript而言,它的編譯階段是在網頁和JavaScript文件下載後同執行階段一塊兒在網頁的加載和渲染過程當中來實施的,因此對於JavaScript引擎執行過程當中的每一個階段時間越少越好。

相關文章
相關標籤/搜索