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

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領取全套視頻
        千鋒教育

        關注千鋒學習站小程序
        隨時隨地免費學習課程

        當前位置:首頁  >  技術干貨  > ChromeV8:編譯器工作流程,解析器

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

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

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

        13

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

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

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

          1. 閱讀腳本代碼

          以下是我們的測試用例:

        14

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

        15

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

        16

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

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

        17

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

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

          2. 解析器初始化

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

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

        18

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

          讓我們進入獲取共享功能信息腳本。

        19

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

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

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

        20

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

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

        21

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

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

        22

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

        23

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

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

          第 25 行啟用以 % 開頭的本機命令。

          總結

          V8 使用 UTF16 對腳本源代碼進行編碼;

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

          首先,查找編譯緩存,如果緩存未命中,則啟動編譯器;

          掃描程序是被動的,分析器是主動的。

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

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

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

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

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

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

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

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

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

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

        2023-09-19 06:37:38
        開班信息
        北京校區(qū)
        • 北京校區(qū)
        • 大連校區(qū)
        • 廣州校區(qū)
        • 成都校區(qū)
        • 杭州校區(qū)
        • 長沙校區(qū)
        • 合肥校區(qū)
        • 南京校區(qū)
        • 上海校區(qū)
        • 深圳校區(qū)
        • 武漢校區(qū)
        • 鄭州校區(qū)
        • 西安校區(qū)
        • 青島校區(qū)
        • 重慶校區(qū)
        • 太原校區(qū)
        • 沈陽校區(qū)
        • 南昌校區(qū)
        • 哈爾濱校區(qū)
        美姑县| 沙田区| 旺苍县| 新乡县| 项城市| 弥渡县| 三台县| 德安县| 河池市| 西乡县| 武威市| 温泉县| 临洮县| 天水市| 都江堰市| 金山区| 神农架林区| 藁城市| 城固县| 平安县| 五寨县| 石家庄市| 长春市| 崇信县| 新泰市| 潢川县| 泗阳县| 金湖县| 蒲江县| 七台河市| 江口县| 香港 | 华阴市| 监利县| 镇平县| 盐津县| 前郭尔| 双桥区| 汕尾市| 额敏县| 哈密市|