精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JS引擎是如何在幕后工作的

開發 前端
在接下來的系列文章中,我們將深入探討JS的世界,從引擎到幕后工作原理,從引擎到提升,執行上下文,詞法環境等概念。

介紹

您是否曾經問過自己“這在幕后如何運作?”。我知道我有

在接下來的系列文章中,我們將深入探討JS的世界,從引擎到幕后工作原理,從引擎到提升,執行上下文,詞法環境等概念。

對某些概念有深刻的了解可以更好地理解代碼,在我們的工作中表現更好,此外,它在面試中非常有用。

而且這可能是一個非常有趣的學科……

在開始之前,還有一件重要的事情要提到-每個JS引擎的構建方式都是不同的,因此無法涵蓋它們的全部工作原理。因此,我們將探索V8的工作原理,但是其他引擎中的概念仍然非常相似,只是其中一些引擎可能會實現不同的功能。

以下是V8工作原理的概述:

如果您還不了解這些內容,請不要擔心,在本文結尾處,您將了解該圖的每個步驟。

因此,順便去吧!

環境

計算機,編譯器甚至瀏覽器實際上無法“理解”用JS編寫的代碼。如果是這樣,代碼如何運行?

在后臺,JS始終在特定環境中運行,最常見的是:

  • 瀏覽器(迄今為止最常見)
  • Node.js(這是一個運行時環境,允許您在瀏覽器外部(通常在服務器中)運行JS)

引擎

 

因此,JS需要在特定環境中運行,但是該環境到底是什么?

當您使用JS編寫代碼時,會以人類可讀的語法(包括字母和數字)來編寫代碼。如前所述,機器無法理解此類代碼。

這就是每個環境都有引擎的原因。

通常,引擎的工作是獲取該代碼并將其轉換為用機器代碼編寫的代碼,該代碼最終可以由計算機處理器運行。

每個環境都有自己的引擎,最常見的引擎是Chrome V8(Node也使用該引擎),Firefox SpiderMonkey,Safari的JavaScriptCore和IE的Chakra。

所有引擎的工作方式都相似,但是每個引擎之間存在差異。

同樣重要的是要記住,在后臺引擎只是一個軟件,例如Chrome V8是用C ++編寫的軟件。

解析器

因此,我們有一個環境,并且在該環境中有一個引擎。引擎在執行代碼時要做的第一件事是使用解析器檢查代碼。

解析器了解JS語法和規則,它的工作是逐行檢查代碼,并檢查代碼的語法是否正確。

如果解析器遇到錯誤,它將停止運行并發出錯誤。如果代碼有效,則解析器會生成稱為“抽象語法樹”(簡稱AST)的內容

抽象語法樹(AST)

因此,我們的環境中有一個引擎,其中包含一個解析器,該解析器生成AST。但是什么是AST,為什么我們需要它?

AST是一種數據結構,它不是JS所獨有的,而是由許多其他語言的編譯器實際使用的(其中一些語言是Java,C#,Ruby,Python)。

AST只是代碼的樹形表示,引擎創建AST而不是直接編譯為機器代碼的主要原因是,當您將代碼包含在樹數據結構中時,轉換為機器代碼更容易。

實際上,您可以查看AST的外觀,只需將任何代碼放入ASTExplorer網站中,并查看創建的數據結構:

解釋器

解釋器的工作是獲取已創建的AST,并將其轉換為代碼的中間表示(IR)。

我們將在需要進一步上下文以充分了解其含義的基礎上,盡快了解有關解釋器的更多信息。

中級代表制(IR)

那么,解釋器從AST生成的IR是什么?

IR是代表源代碼的數據結構或代碼。它的作用是介于以JS之類的抽象語言編寫的代碼與機器代碼之間的中間步驟。

本質上,您可以將IR視為機器代碼的抽象。

IR的類型很多,在JS引擎中非常流行的是字節碼。這是一張圖片,展示了IR在V8引擎中的作用:

但是您可能會問……為什么我們需要IR?為什么不直接編譯為機器代碼呢?引擎將IR用作高級代碼和機器代碼之間的中間步驟的主要原因有兩個:

  • 為Intel處理器編寫的機器代碼和為ARM處理器編寫的機器代碼將有所不同。另一方面,IR可以像通用的那樣匹配兩者,并且可以匹配任何平臺。這使得下面的轉換過程更加容易和移動。
  • 優化-與IR相比,使用IR進行優化更容易,從代碼優化和硬件優化的角度來看都是如此。

有趣的事實:JS引擎并不是唯一使用字節碼作為IR的引擎,在也使用字節碼的語言中,您會發現C#,Ruby,Java等。

編譯器

編譯器的工作是獲取解釋器創建的IR(在我們的示例中為Bytecode),然后通過某些優化將其轉換為機器代碼。

讓我們談談代碼編譯和一些基本概念。請記住,這是一個巨大的主題,需要花費大量時間來掌握,因此在我們的使用案例中,我將只對它進行一般性的介紹。

解釋器vs編譯器

有兩種方法可以使用編譯器和解釋器將代碼轉換為機器可以運行的機器語言。

解釋器和編譯器之間的區別在于,解釋器翻譯您的代碼并逐行執行,而編譯器在執行之前將所有代碼立即翻譯成機器代碼。

每種方法各有利弊,編譯器啟動很快,但是復雜且啟動緩慢,解釋器雖然簡單但速度較慢。

話雖如此,有3種方法可以將高級代碼轉換為機器代碼并運行它:

  • 解釋-使用這種策略,您會有一個解釋器,它逐行執行代碼并執行(效率不高)。
  • 提前進行時間編譯(AOT)-在這里,您需要一個編譯器來首先編譯整個代碼,然后才執行它。
  • 即時編譯— JOT編譯策略結合了AOT策略和解釋策略,試圖從兩個方面吸取最大的優勢,執行動態編譯,還允許進行某些優化,這實際上加快了編譯過程。我們將解釋有關JIT編譯的更多信息。

大多數JS引擎使用JIT編譯器,但不是全部。例如,React Native使用的引擎Hermes,沒有使用JIT編譯器。

綜上所述,編譯器采用由解釋器創建的IR并從中生成優化的機器代碼。

JIT編譯器

就像我們說的那樣,大多數JS引擎都使用JIT編譯方法。JIT結合了AOT策略和解釋,允許進行某些優化。讓我們更深入地研究這些優化以及編譯器的功能。

JIT編譯優化是通過重復執行代碼并對其進行優化來完成的。優化過程如下:

本質上,JIT編譯器通過收集執行代碼的概要分析數據來獲得反饋,如果它遇到任何熱代碼段(重復自身的代碼),則該熱段將通過編譯器,然后編譯器將使用此信息重新更優化地編譯。

假設您有一個函數,該函數返回對象的屬性:

  1. function load(obj) {  
  2.   return obj.x; 

看起來簡單嗎?也許對我們來說,但是對于編譯器而言,這并不是一件容易的事。如果編譯器看到一個對象,它不知道任何東西,則它必須檢查屬性x的位置,如果該對象確實具有這樣的屬性,它在內存中的位置,在原型鏈中的位置等等。

那么如何優化它呢?

為了理解這一點,我們必須知道在機器代碼中,對象及其類型已保存。

假設我們有一個具有x和y屬性的對象,x是數字類型,而y是字符串類型。從理論上講,該對象將用如下的機器代碼表示:

如果我們調用具有相同對象結構的函數,則可以完成優化。這意味著屬性將相同且順序相同,但值可以不同,如下所示:

  1. load({x: 1, y: 'hello'}); 
  2. load({x: 5, y: 'world'}); 
  3. load({x: 3, y: 'foo'}); 
  4. load({x: 9, y: 'bar'}); 

運作方式如下。調用該函數后,優化的編譯器將識別出我們正在嘗試調用已被再次調用的函數。

然后,它將繼續檢查作為參數傳遞的對象是否具有相同的屬性。

如果是這樣,它將已經能夠訪問其在內存中的位置,而不用瀏覽原型鏈并完成對未知對象所做的許多其他事情。

本質上,編譯器通過優化和反優化過程運行。

當我們運行代碼時,編譯器假定函數將使用與以前使用的類型相同的類型,因此它將代碼與類型預先保存在一起。這種類型的代碼稱為優化機器代碼。

每次代碼再次調用相同的函數時,優化的編譯器將嘗試訪問內存中的相同位置。

但是由于JS是一種動態類型的語言,因此在某些時候,我們可能希望將相同的函數用于不同的類型。在這種情況下,編譯器將執行去優化過程,并正常地編譯代碼。

總結一下有關JIT編譯器的部分,JIT編譯器的工作是通過使用熱代碼段來提高性能,當編譯器執行之前執行的代碼時,它假定類型相同并且使用已生成的優化代碼,但是如果類型不同,則JIT會執行去優化并正常地編譯代碼。

關于性能的說明

改善應用程序性能的一種方法是對不同的對象使用相同的類型。如果您具有相同類型的兩個不同對象,即使值不同,只要屬性具有相同的順序并具有相同的類型,則編譯器會將這兩個對象視為具有相同結構和類型的對象,并且可以更快地訪問它。

例如:

  1. const obj = { x: 1, a: true, b: 'hey' }  
  2. const obj2 = { x: 7, a: false, b: 'hello' } 

從示例中可以看到,我們有兩個具有不同值的不同對象,但是由于屬性的順序和類型相同,因此編譯器將能夠更快地編譯這些對象。

但是,即使有可能以這種方式優化代碼,但我認為對于性能而言,還有許多重要的事情要做,而這無關緊要的事情。

在團隊中執行這樣的事情也很困難,并且由于引擎非常快,因此總體上看并沒有太大的區別。

話雖如此,我已經看到V8團隊成員推薦了此技巧,所以也許您確實希望有時嘗試遵循它。在可能的情況下遵循它不會對我造成任何傷害,但絕對不會以干凈的代碼和體系結構決策為代價

概要

JS代碼必須在環境中運行,最常見的是瀏覽器和Node.js。

該環境需要有一個引擎,該引擎需要采用以人類可讀的語法編寫的JS代碼,然后將其轉換為機器代碼。

引擎使用解析器逐行瀏覽代碼,并檢查語法是否正確。如果有任何錯誤,代碼將停止執行并引發錯誤。

如果所有檢查都通過,則解析器將創建一個稱為抽象語法樹(AST)的樹數據結構。

AST是一種數據結構,以樹狀結構表示代碼。通過AST將代碼轉換為機器代碼更加容易。

然后,解釋器繼續進行AST并將其轉換為IR,這是機器代碼的抽象,并且是JS代碼和機器代碼之間的中介。IR還可以執行優化,并且移動性更強。

然后,JIT編譯器通過編譯代碼,獲取動態反饋并使用該反饋改進編譯過程,從而將生成的IR轉換為機器代碼。

原文鏈接:

https://medium.com/coralogix-engineering/how-js-works-behind-the-scenes-the-engine-9f15bba95a15) 

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-09-22 16:03:07

CSS-in-JS代碼

2021-05-28 15:50:25

數據分析企業大數據

2021-10-14 11:34:05

技術工作流引擎

2023-01-31 16:43:31

?Node.js事件循環

2019-01-14 08:06:37

JavaScript

2011-08-08 13:45:58

jQuery

2021-05-10 17:20:55

AIOps開發人員人工智能

2018-12-13 14:10:37

JavaScript調用堆棧前端

2023-04-18 14:53:48

2010-08-02 16:56:03

ICMP協議

2023-04-18 15:09:50

2021-08-03 14:29:30

ARPANET互聯網協議TCP

2024-09-06 17:55:27

Springboot開發

2019-01-05 09:05:15

區塊鏈互聯網區塊鏈技術

2023-03-06 00:27:02

Kubernetesscheduler系統

2009-07-06 12:32:26

JSP引擎

2024-12-16 08:00:00

C++虛函數表

2024-02-22 08:00:00

SoraOpenAI

2022-08-08 08:00:00

人工智能機器學習計算機應用

2022-05-18 08:00:00

JavaScriptFetch數據
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区高清视频| 91高潮精品免费porn| 波多野结衣免费观看| 黄网页免费在线观看| 国产成人在线观看| 韩日欧美一区二区| 丁香激情五月少妇| 亚洲3区在线| 日韩欧美精品中文字幕| 色播五月综合| 高h放荡受浪受bl| 日韩av不卡一区二区| 九九久久久久99精品| 免费a在线观看播放| 一区二区三区日本视频| 亚洲福利电影网| 亚洲一区在线免费| 亚洲av成人无码久久精品老人 | 国产精品天天摸av网| 97在线中文字幕| 中文字幕在线日本| 国产精品www994| 最近2019免费中文字幕视频三| 伊人久久久久久久久| 国产麻豆久久| 亚洲成人高清在线| 国产精品无码乱伦| 高h视频在线| 99热这里都是精品| 91久色国产| 一级片aaaa| 青青青伊人色综合久久| 91国内在线视频| 欧美日韩免费做爰视频| 欧美韩日一区| 亚洲欧洲日韩国产| 又黄又爽又色的视频| 欧美爱爱视频| 在线观看不卡视频| 男人操女人免费| 欧美在线极品| 同产精品九九九| 超级碰在线观看| 久草免费在线| 国产精品不卡视频| 亚洲二区三区四区| 成人在线观看网站| 国产日产欧产精品推荐色 | 欧美一区二区三区影院| 日韩免费在线电影| 欧美日韩三级一区二区| 91激情视频在线| 日韩免费小视频| 欧美艳星brazzers| 五月婷婷深爱五月| 精品国产美女a久久9999| 欧洲一区二区三区免费视频| 日本黄网站免费| 久久sese| 欧洲av在线精品| 三级a三级三级三级a十八发禁止| 三上悠亚一区二区| 在线视频中文字幕一区二区| av五月天在线| 黄色成人在线观看网站| 欧美久久一区二区| 久久精品一二三四| 国产精品流白浆在线观看| 亚洲国产欧美一区二区三区同亚洲| 亚洲熟女一区二区三区| 精品在线网站观看| 精品无人国产偷自产在线| aaaaaav| 亚洲黄色录像| 国产一区二区日韩精品欧美精品| 林心如三级全黄裸体| 欧美独立站高清久久| 九九热精品视频| 久久精品无码人妻| 男人天堂欧美日韩| 国产精品日韩欧美大师| av免费观看在线| 91丨国产丨九色丨pron| 色综合电影网| 国产在线激情| 午夜精品aaa| 久久午夜夜伦鲁鲁一区二区| 国产精品一级在线观看| 亚洲二区在线播放视频| 亚洲黄色免费视频| 欧美日韩国产综合网| 欧美精品激情blacked18| 亚洲s码欧洲m码国产av| 久久精品国产精品亚洲综合| 国产精品国产亚洲精品看不卡15 | 久久久精品影视| 精品91一区二区三区| 98色花堂精品视频在线观看| 在线观看视频91| 无码人妻一区二区三区精品视频| 九九久久成人| 久久精品电影网| 国产无遮挡呻吟娇喘视频| 久久成人免费电影| 国产综合18久久久久久| 免费a在线看| 欧美丝袜一区二区三区| 国产性生活一级片| 杨幂一区二区三区免费看视频| 久久大大胆人体| 可以免费在线观看的av| 国产一区欧美日韩| 日本高清久久一区二区三区| 色女人在线视频| 欧美午夜精品免费| 欧美成人三级伦在线观看| 亚洲精品一区二区妖精| 欧美做爰性生交视频| a级片在线播放| 欧美经典一区二区| 久久精品免费一区二区| 18国产精品| 久久精品国产综合| 欧美黄色一级大片| 91在线免费播放| 成人av在线播放观看| 91精品国产一区二区在线观看| 亚洲欧美中文在线视频| 伊人国产在线观看| 精品一区二区三区在线观看国产| 欧美日韩一区二| 黄色漫画在线免费看| 日韩女优毛片在线| 午夜剧场免费在线观看| 日本人妖一区二区| 欧美日韩精品免费看| 绿色成人影院| 精品偷拍各种wc美女嘘嘘| 国产精彩视频在线| 成人精品高清在线| 成人一级生活片| 草莓视频一区二区三区| 久久综合色影院| 国产熟女一区二区丰满| 日韩一区在线看| 一级做a免费视频| av伊人久久| 国产精品视频久久久久| 二区在线观看| 色8久久人人97超碰香蕉987| 欧美特级黄色录像| 久久一区国产| 日韩在线观看电影完整版高清免费| 成人美女黄网站| 国产午夜精品全部视频播放| 波多野结衣小视频| 亚洲国产精品精华液ab| 欧美特级aaa| 99久久国产综合精品成人影院| 国产精品久久久久久av福利软件| 国产精品毛片一区二区三区四区| 91黄色免费版| 国产中文字幕久久| 激情深爱一区二区| 欧美一二三不卡| 精品国产一区二区三区不卡蜜臂| 97碰碰碰免费色视频| 飘雪影院手机免费高清版在线观看| 91久久精品午夜一区二区| 在线观看亚洲大片短视频| 久久成人免费日本黄色| 日本a在线天堂| 欧美亚洲国产日韩| 国产精品爱啪在线线免费观看| av在线电影网| 日韩欧美国产一区在线观看| 特一级黄色大片| 欧美激情资源网| 欧美性猛交xx| 美女视频一区免费观看| 亚洲一卡二卡区| 4438全国亚洲精品观看视频| 国产mv久久久| 粗大黑人巨茎大战欧美成人| 精品国产三级电影在线观看| 亚洲免费在线视频观看| 国产精品对白交换视频 | 久久影院午夜片一区| 自拍偷拍21p| 欧美激情第10页| 欧美日韩大片一区二区三区| 青青在线精品| 57pao成人永久免费视频| 在线免费av电影| 欧美精品一区二区久久婷婷| 曰批又黄又爽免费视频| 亚洲午夜精品一区二区三区他趣| 谁有免费的黄色网址| 高清国产一区二区| 丰满少妇在线观看| 国产精品v一区二区三区| 亚洲国产日韩综合一区| 国内精品麻豆美女在线播放视频 | 久久久91精品国产一区二区三区| 四虎成人在线播放| 青娱乐精品视频| 久久黄色片视频| 欧美阿v一级看视频| 日本一区免费观看| 成人爽a毛片| 91网站在线免费观看| 午夜精品成人av| 国内精品久久久久影院优| 尤物网在线观看| 亚洲人成电影网站色| 好吊色一区二区| 欧美一三区三区四区免费在线看| 亚洲不卡在线视频| 五月天视频一区| 麻豆国产尤物av尤物在线观看| 国产精品水嫩水嫩| 中文字幕免费视频| 91丨porny丨国产| 毛茸茸free性熟hd| 国产99久久久国产精品潘金 | 26uuu亚洲婷婷狠狠天堂| 性色av浪潮av| 激情综合色播五月| 超碰超碰在线观看| 免费黄网站欧美| 免费看黄色一级大片| 久久xxxx| 免费观看日韩毛片| 国产欧美大片| av7777777| 亚洲精华国产欧美| 日韩伦理在线免费观看| 欧美午夜国产| 青青草视频在线视频| 欧美激情综合| 日韩久久久久久久久久久久| 综合天堂av久久久久久久| 一区二区在线观| 欧美大黑bbbbbbbbb在线| 亚洲国产一区二区三区在线播| 国产尤物久久久| 日韩欧美视频第二区| 国产中文精品久高清在线不| 欧美精品在线一区| 欧洲杯足球赛直播| 亚洲国产成人不卡| 久久在线视频免费观看| 日本成人性视频| 欧美片第1页综合| 欧美一区二区视频在线播放| 影音先锋亚洲精品| 日本日本19xxxⅹhd乱影响| 午夜综合激情| 天天爽人人爽夜夜爽| 久久97超碰国产精品超碰| 久久精品亚洲天堂| 大美女一区二区三区| 国产老熟女伦老熟妇露脸| 2021中文字幕一区亚洲| 91l九色lporny| 亚洲男人的天堂一区二区| 妺妺窝人体色www在线下载| 亚洲成人资源在线| 久草视频在线免费| 91麻豆精品91久久久久同性| 亚洲女人18毛片水真多| 日韩精品一二三四区| av电影在线观看一区二区三区| 久久天天躁日日躁| 123区在线| 国产精品看片资源| 99精品在免费线中文字幕网站一区| 韩国一区二区三区美女美女秀 | 丝袜美腿精品国产二区 | 欧美亚洲国产日韩2020| 91p九色成人| 97超碰在线播放| 亚洲福利天堂| 91社在线播放| 亚洲欧美不卡| 亚洲精品第三页| 99精品久久只有精品| 国产激情av在线| 亚洲综合另类小说| 成年人视频免费| 日韩精品一区二区三区中文不卡| 深夜福利视频在线免费观看| 日韩一区av在线| 精精国产xxxx视频在线播放| 成人国产精品久久久| 欧美一区二区三区红桃小说| 亚洲精品成人三区| 韩国在线视频一区| 五月天亚洲视频| 本田岬高潮一区二区三区| 18精品爽国产三级网站| 天天综合色天天| 国产麻豆精品一区| 亚洲欧美日本另类| 国产网红在线观看| 国产中文字幕亚洲| 免费成人av| 大西瓜av在线| 韩国欧美一区二区| 久久成人激情视频| 亚洲成av人在线观看| 国产精品一品二区三区的使用体验| 日韩精品在线视频美女| 人妖欧美1区| 成人免费自拍视频| 日韩成人激情| 欧美丰满熟妇xxxxx| 99久久综合色| 久久丫精品久久丫| 在线播放日韩导航| 91精品专区| 国产精品对白刺激| 亚洲欧洲美洲国产香蕉| 日韩视频在线视频| 国产激情91久久精品导航| 可以免费看av的网址| 在线视频欧美精品| 日韩精品系列| 69视频在线播放| 成人春色在线观看免费网站| 国产一二三四五| 激情六月婷婷综合| 成人信息集中地| 欧美午夜片在线看| 91精彩视频在线观看| 国产精品久久久久久久美男| 国内精品视频在线观看| 日本在线观看a| 久久精品亚洲一区二区三区浴池| 中日韩精品视频在线观看| 精品国产露脸精彩对白| xxxcom在线观看| 国产精品手机视频| 亚洲高清在线| 国产精品久久无码| 色婷婷久久一区二区三区麻豆| 色鬼7777久久| 国产成人短视频| 不卡在线一区| 欧美成人福利在线观看| 国产精品美女视频| 国产色综合视频| 欧美人在线视频| 加勒比中文字幕精品| 欧美啪啪免费视频| 久久久精品免费观看| 国产日韩在线免费观看| 最近2019中文字幕一页二页| 日韩第二十一页| 国产亚洲精品久久久久久久| 成人性生交大片免费看视频在线| 国产精品50页| 亚洲人成电影网站色| 欧美日韩伦理一区二区| 2021国产视频| 成人h版在线观看| 99re这里只有精品在线| 日韩在线观看av| 亚洲一区 二区| 成人免费在线小视频| 中文字幕乱码久久午夜不卡| 国产美女永久免费| 97视频在线免费观看| 欧美日韩一区二区综合| 永久av免费在线观看| 五月天激情小说综合| 爱爱爱免费视频在线观看| 成人免费视频网址| 日韩午夜免费视频| 手机看片国产日韩| 亚洲第一二三四五区| 人人鲁人人莫人人爱精品| 宅男在线精品国产免费观看| 懂色一区二区三区免费观看| 亚洲成人第一网站| 久久久精品美女| 亚洲综合图色| 在线观看一区二区三区视频| 色综合婷婷久久| 岛国成人毛片| 日本一区二区在线视频观看| 国产福利视频一区二区三区| 久久久久久在线观看| 久久这里有精品| 亚洲三级网页| 中文字幕乱码在线人视频| 色婷婷亚洲婷婷| 黑人极品ⅴideos精品欧美棵| 午夜精品一区二区在线观看| www.欧美精品一二区|