首頁 >web前端 >js教程 >帶你了解JavaScript的運作原理

帶你了解JavaScript的運作原理

WBOY
WBOY轉載
2022-08-31 17:40:311831瀏覽

本篇文章為大家帶來了關於javascript的相關知識,主要介紹了關於JavaScript的運作原理,本文為大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鏡價值,需要的朋友可以參考下。

帶你了解JavaScript的運作原理

【相關推薦:javascript影片教學web前端

了解JavaScript 是如何運作的,以及的它的運作機制,首先,我們要了解瀏覽器的核心:

瀏覽器核心

了解的都知道:不同的瀏覽器是由不同的核心組成,那麼有哪些核心以及我們常用的瀏覽器都使用了那些核心:

  • Gecko:早期被Netscape和Mozilla Firefox瀏覽器瀏覽器使用;
  • Trident:微軟開發,被IE4~IE11瀏覽器使用,但Edge瀏覽器已經轉向Blink;
  • Webkit:蘋果基於KHTML開發、開源的,用於Safari,Google Chrome之前也在使用;
  • Blink :是Webkit的一個分支,Google開發,目前應用於Google Chrome、Edge、Opera等;

所謂瀏覽器內核,指的是瀏覽器的排版引擎,也就是瀏覽器引擎。引擎的工作執行流程如下:

帶你了解JavaScript的運作原理

但是在這個執行過程中,HTML解析的時候遇到了JavaScript標籤,該怎麼辦呢?
會停止解析HTML,而去載入並執行JavaScript程式碼;

#當然,為什麼不直接非同步去載入執行JavaScript程式碼,而要在這裡停止掉呢?

所以瀏覽器希望將HTML解析的DOM和JavaScript操作之後的DOM放在一起來產生最終的DOM樹,而不是頻繁的去生成新的DOM樹;

那麼, JavaScript程式碼由誰來執行呢?
答案:JavaScript 引擎

JavaScript 引擎

為什麼需要JavaScript引擎呢?

  • #事實上我們寫的JavaScript無論你交給瀏覽器或Node執行,最後都是需要被CPU執行的;
  • 但是CPU只認識自己的指令集,實際上是機器語言,才能被CPU執行;
  • 所以我們需要JavaScript引擎幫助我們將JavaScript程式碼翻譯成CPU指令來執行;
##常見的JavaScript 引擎有哪些呢?

    SpiderMonkey:第一款JavaScript引擎,由Brendan Eich開發(也就是JavaScript作者);
  • Chakra:微軟開發,用於IE瀏覽器;
  • JavaScriptCore:WebKit中的JavaScript引擎,Apple公司開發;
  • V8:Google開發的強大JavaScript引擎,也幫助Chrome從眾多瀏覽器中脫穎而出;(V8 是一個強大的JavaScript 引擎)
V8 引擎

    V8是用C 寫的Google開源高效能JavaScript和WebAssembly引擎,它用於Chrome和Node.js等。
  • 它實作ECMAScript和WebAssembly,並在Windows 7或更高版本,macOS 10.12 和使用x64,IA-32,ARM或MIPS處理器的Linux系統上運作。
  • V8可以獨立運行,也可以嵌入到任何C 應用程式中。
V8 引擎執行JavaScript 程式碼的原理:

Parse模組會將JavaScript程式碼轉換成AST(抽象語法樹),這是因為解釋器並沒有直接認識- JavaScript程式碼;

     如果函數沒有被調用,那麼是不會被轉換成AST的;
  • Parse的V8官方文件:https://v8.dev/blog/scanner
Ignition是一個解釋器,會將AST轉換成ByteCode(字節碼)

    同時會收集TurboFan優化所需的資訊(例如函數參數的類型信息,有了類型才能進行真實的運算);
  • 如果函數只呼叫一次,Ignition會執行解釋執行ByteCode;
  • Ignition的V8官方文件:https://v8.dev/ blog/ignition-interpreter
TurboFan是一個編譯器,可以將字節碼編譯為CPU可以直接執行的機器碼;

    如果一個函式被多次調用,那麼就會被標記為熱點函數,那麼就會經過TurboFan轉換成優化的機器碼,提高程式碼的執行效能;
  • 但是,機器碼實際上也會被還原為ByteCode,這是因為如果後續執行函數的過程中,類型發生了變化(例如sum函數原來執行的是number類型,後來執行變成了string類型),之前優化的機器碼並不能正確的處理運算,就會逆向的轉換成字節碼;
  • TurboFan的V8官方文件:https://v8.dev/blog/turbofan-jit
上面是JavaScript程式碼的執行過程

【相關推薦:javascript影片教學web前端

以上是帶你了解JavaScript的運作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除