最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

帶你了解JavaScript的運行原理

 更新時間:2021年08月30日 11:31:18   作者:李貓er  
這篇文章主要介紹了關于JavaScript的運行原理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

瀏覽器內核

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

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

所謂瀏覽器內核,指的是瀏覽器的排版引擎,即瀏覽器引擎。引擎的工作執(zhí)行流程如下:

在這里插入圖片描述

但是在這個執(zhí)行過程中,HTML解析的時候遇到了JavaScript標簽,應該怎么辦呢?
會停止解析HTML,而去加載和執(zhí)行JavaScript代碼;

當然,為什么不直接異步去加載執(zhí)行JavaScript代碼,而要在這里停止掉呢?

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

那么,JavaScript代碼由誰來執(zhí)行呢?
答案:JavaScript 引擎

JavaScript 引擎

為什么需要JavaScript引擎呢?

  • 事實上我們編寫的JavaScript無論你交給瀏覽器或者Node執(zhí)行,最后都是需要被CPU執(zhí)行的;
  • 但是CPU只認識自己的指令集,實際上是機器語言,才能被CPU所執(zhí)行;
  • 所以我們需要JavaScript引擎幫助我們將JavaScript代碼翻譯成CPU指令來執(zhí)行;

常見的JavaScript 引擎有哪些呢?

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

V8 引擎

  • V8是用C ++編寫的Google開源高性能JavaScript和WebAssembly引擎,它用于Chrome和Node.js等。
  • 它實現(xiàn)ECMAScript和WebAssembly,并在Windows 7或更高版本,macOS 10.12+和使用x64,IA-32,ARM或MIPS處理器的Linux系統(tǒng)上運行。
  • V8可以獨立運行,也可以嵌入到任何C ++應用程序中。

V8 引擎執(zhí)行JavaScript 代碼的原理:

Parse模塊會將JavaScript代碼轉換成AST(抽象語法樹),這是因為解釋器并不直接認識- JavaScript代碼;

Ignition是一個解釋器,會將AST轉換成ByteCode(字節(jié)碼)

  • 同時會收集TurboFan優(yōu)化所需要的信息(比如函數參數的類型信息,有了類型才能進行真實的運算);
  • 如果函數只調用一次,Ignition會執(zhí)行解釋執(zhí)行ByteCode;
  • Ignition的V8官方文檔:https://v8.dev/blog/ignition-interpreter

TurboFan是一個編譯器,可以將字節(jié)碼編譯為CPU可以直接執(zhí)行的機器碼;

  • 如果一個函數被多次調用,那么就會被標記為熱點函數,那么就會經過TurboFan轉換成優(yōu)化的機器碼,提高代碼的執(zhí)行性能;
  • 但是,機器碼實際上也會被還原為ByteCode,這是因為如果后續(xù)執(zhí)行函數的過程中,類型發(fā)生了變化(比如sum函數原來執(zhí)行的是number類型,后來執(zhí)行變成了string類型),之前優(yōu)化的機器碼并不能正確的處理運算,就會逆向的轉換成字節(jié)碼;
  • TurboFan的V8官方文檔:https://v8.dev/blog/turbofan-jit

上面是JavaScript代碼的執(zhí)行過程

學習,記錄,共勉!

到此這篇關于帶你了解JavaScript的運行原理的文章就介紹到這了,更多相關JavaScript運行原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

天镇县| 如皋市| 铁岭市| 宜兰市| 疏附县| 丰县| 咸宁市| 甘谷县| 叙永县| 津南区| 嘉鱼县| 南昌市| 西城区| 隆安县| 和平区| 渝中区| 仙游县| 馆陶县| 彩票| 衡阳市| 彭山县| 怀来县| 衡东县| 乌恰县| 黎川县| 合阳县| 彩票| 广元市| 乌恰县| 长治县| 平南县| 铜山县| 重庆市| 垫江县| 青岛市| 金沙县| 广东省| 扎兰屯市| 历史| 丰原市| 安康市|