久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > ChromeV8:編譯器工作流程,解析器

ChromeV8:編譯器工作流程,解析器

來源:千鋒教育
發(fā)布人:syq
時(shí)間: 2022-09-15 11:50:23 1663213823

  在過去的文章中,我們討論了很多關(guān)于 V8 的 JavaScript 編譯器。解析器,掃描程序和字節(jié)碼,以及它們的基本原理,內(nèi)核代碼和密鑰結(jié)構(gòu),都是我們介紹的。

13

  在接下來的文章中,我們將逐步介紹編譯器工作流程,并觀察 V8 如何逐步將 JavaScript 代碼轉(zhuǎn)換為字節(jié)碼。

  V8從您編寫的 JavaScript 代碼開始,經(jīng)過掃描程序和解析器,最后生成字節(jié)碼。

  注意:在本文中,我使用d8.exe而不是v8.exe,因?yàn)閐8.exe可以直接打印到終端,并且d8與v8相比非常輕。

  1. 閱讀腳本代碼

  以下是我們的測(cè)試用例:

14

  下面是負(fù)責(zé)執(zhí)行 JavaScript 代碼的執(zhí)行()。很簡(jiǎn)單,它首先從文件中讀取JavaScript代碼,然后編譯并執(zhí)行代碼。

15

  在第 5 行中,新取自 8 獲取文件名,這就是我們的情況。在第 8 行中,讀取文件獲取文件內(nèi)容,這實(shí)際上是我們的情況。

16

  第 8 行和第 10 行返回 JavaScript 代碼,具體取決于類型是外部一字節(jié)或 UTF8。在這里,我們的例子是UTF8,關(guān)于字符串::外部一字節(jié)字符串資源,我們將在將來討論它。

  返回到源代碼組::執(zhí)行(),并在第 14 行單步執(zhí)行::執(zhí)行字符串,其源代碼如下:

17

  在第 13 行中,我們的 JavaScript 被包裝到一個(gè)變量script_source其中包括行和列偏移量。由于 V8 只編譯完全不是完整 JavaScript 代碼執(zhí)行的 JavaScript 函數(shù),因此變量script_source幫助編譯器記錄編譯信息。

  在第 14 行中,開始編譯腳本。

  2. 解析器初始化

  在工作流中,第一部分是掃描儀,第二部分是解析器。實(shí)際上,掃描程序是被動(dòng)的,解析器是主動(dòng)的,這意味著解析器主動(dòng)地從編譯緩存中取出一個(gè)令牌,一旦緩存未命中,掃描程序就會(huì)被解析器喚醒,并生成令牌并填充緩存。

  下面是由腳本編譯器調(diào)用的編譯不受約束的內(nèi)部():編譯在第14行的上面。

18

  上面的函數(shù)生成了未綁定的內(nèi)部?jī)?nèi)容,第 11 行告訴我們,這些內(nèi)容實(shí)際上只是一個(gè)共享函數(shù)。但是,什么是綁定?共享函數(shù)不能直接執(zhí)行,V8 需要將上下文與共享函數(shù)匹配,“匹配”只是必應(yīng)。

  讓我們進(jìn)入獲取共享功能信息腳本。

19

  第7行正在查找我在上一篇文章中提到的編譯緩存。

  第 13 行,parse_info是解析器的包裝器,就像前面提到的變量script_source樣。

  第15行,Parser_info初始化,代碼如下:

20

  從第 6 行到第 12 行,將我們的情況中的 JavaScript 代碼包裝到變量腳本中,然后初始化line_offset并column_offset。就像我說的script_source樣。

  返回編譯器::獲取共享功能信息腳本(),然后在第 23 行單步執(zhí)行編譯頂級(jí) ()。

21

  在第 5 行中,文本() 返回抽象語法樹 (AST),如果為空,則 V8 啟動(dòng)編譯器以生成 AST。

  第一次,AST 為空,并單步執(zhí)行解析程序。

22

  在第 5 行中,創(chuàng)建解析器,即解析器初始化。

23

  從第8行到第18行,取出編譯信息,如掃描儀和編譯模式。

  從第9行到第23行,重要的東西是can_compile_lazily。

  第 25 行啟用以 % 開頭的本機(jī)命令。

  總結(jié)

  V8 使用 UTF16 對(duì)腳本源代碼進(jìn)行編碼;

  V8 使用 v8::內(nèi)部::源代碼來管理我們的腳本代碼;

  首先,查找編譯緩存,如果緩存未命中,則啟動(dòng)編譯器;

  掃描程序是被動(dòng)的,分析器是主動(dòng)的。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
抖店入駐收費(fèi)多少?開抖店費(fèi)用是多少?

如果要開通抖音小店,需要先把抖音賬號(hào)開通商品櫥窗功能。入駐之后,可以選擇頭條賬號(hào)、抖音賬號(hào)、火山賬號(hào)任一類型注冊(cè)或登錄。那開個(gè)抖店要多...詳情>>

2023-09-19 07:50:26
想做直播帶貨的貨源哪里來?怎么找貨源?

現(xiàn)如今直播推廣的方式是非?;鸬?,有著非常多的賣家都是利用直播推廣店鋪產(chǎn)品,效果也是非常不錯(cuò)。但很多賣家想要了解現(xiàn)在直播帶貨的話什么產(chǎn)品...詳情>>

2023-09-19 07:47:16
適合三農(nóng)領(lǐng)域的名字?有何技巧?

現(xiàn)在在抖音上很多博主會(huì)選擇直播來賺取更多的流量以及利潤(rùn),直播間的東西也有很多讓消費(fèi)者信任并且喜歡的,而且隨著越來越多人直播,很多農(nóng)產(chǎn)品...詳情>>

2023-09-19 07:06:05
抖店商品發(fā)布違規(guī)怎么申訴?有何規(guī)則?

抖店服務(wù)市場(chǎng)服務(wù)商發(fā)布違禁信息如何處理?情節(jié)嚴(yán)重程度判定原則:違規(guī)嚴(yán)重等級(jí)主要通過服務(wù)商違規(guī)次數(shù)、造成后果的嚴(yán)重程度、獲利或?qū)е聯(lián)p失的...詳情>>

2023-09-19 06:59:55
“泛垂直起號(hào)”可能是2023年最高效的起號(hào)方式

這可能是明年最好用的旗號(hào)方式了,今天教大家一個(gè)很野,但是可以讓你三天漲1000粉的偏方。去年前年啊,每個(gè)人都教你,誰知七號(hào)對(duì)著自己的產(chǎn)品拍...詳情>>

2023-09-19 06:37:38
開班信息
北京校區(qū)
  • 北京校區(qū)
  • 大連校區(qū)
  • 廣州校區(qū)
  • 成都校區(qū)
  • 杭州校區(qū)
  • 長(zhǎng)沙校區(qū)
  • 合肥校區(qū)
  • 南京校區(qū)
  • 上海校區(qū)
  • 深圳校區(qū)
  • 武漢校區(qū)
  • 鄭州校區(qū)
  • 西安校區(qū)
  • 青島校區(qū)
  • 重慶校區(qū)
  • 太原校區(qū)
  • 沈陽校區(qū)
  • 南昌校區(qū)
  • 哈爾濱校區(qū)