1.JavaScript是一門高級的編程語言。
有高級編程語言,就有低級編程語言,從編程語言發展歷史來說,可以划分三個階段:
- 機器語言:10001000111,一些機器指令;
- 匯編語言:mov ax ,bx,一些匯編指令;
- 高級語言:C、C++、Java、Javascript、Python
但是計算機本身不認識這些高級語言,所以我們的代碼最終需要被轉換成機器指令:
2. 瀏覽器的工作原理
有沒有深入考慮過:JavaScript代碼,在瀏覽器是如何被執行的?
3.瀏覽器內核
我們經常聽說:不同的瀏覽器有不同的內核組成
Gecko:早期被Netscape和Mozilla Firefox瀏覽器使用;
Trident:微軟開發,被IE4-IE11瀏覽器使用,但是Edge瀏覽器已經轉向blink
blink:是Webkit的一個分支,Google開發,目前應用於Google Chrome、Edge、Opera等
4.瀏覽器渲染過程
在執行過程中,HTML解析的時候遇到JavaScript標簽,應該怎么辦?
- 會停止解析HTML,而去加載和執行JavaScript代碼;
那么,JavaScript代碼由誰來執行呢?
- JavaScript引擎
5.認識JavaScript引擎
為什么需要JavaScript引擎呢?
高級的編程語言都是需要轉成最終的機器指令來執行的;
事實上我們編寫的Javascript無論你交給瀏覽器或者Node執行,最后都是需要被CPU執行的;
但是CPU只認識自己的指令集,實際上是機器語言,才能被CPU所執行;
所以我們需要JavaScript引擎幫助我們將JavaScript代碼翻譯成CPU指令來執行;
5.1比較常見的JavaScript引擎有哪些?
SpiderMonKey:第一款Javascript引擎,由Brendan Eich開發(也就是JavaScript作者);
Chakra:微軟開發,用於IT瀏覽器
JavaScriptCore:WebKit中的JavaScript引擎,Apple開發;
V8:Google開發的強大JavaScript引擎,也幫助Chrome從眾多瀏覽器脫穎而出;
。。。
5.2瀏覽器內核和JS引擎的關系
我們先以WebKit為例,WebKit事實上由兩部分組成的:
WebCore:負責HTML解析、布局、渲染等等相關工作;
JavaScriptCore:解析、執行JavaScript代碼;
6.另一個強大的JavaScript引擎就是V8引擎
官方對V8引擎的定義:
- V8是用C++編寫的Google開源高性能JavaScript和WebAssembly引擎,它用於Chrome和Node.js等。
- 它實現ECMAScript和WebAssembly,並在window7或者更高版本,macOS10.12+和使用*64,IA-32,arm或者MIPS處理器的linux系統上運行。
- V8可以獨立運行,也可以嵌入到任何C++應用程序中。
6.1 V8引擎架構
JavaScript源碼是如何被解析(Parse過程)的呢?