久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

javascript依賴于什么支持

javascript依賴于底層javascript引擎的支持。javascript運(yùn)行在瀏覽器,主要依靠瀏覽器的js引擎解釋執(zhí)行js代碼;JavaScript引擎是一個專門處理JavaScript腳本的虛擬機(jī),一般會附帶在網(wǎng)頁瀏覽器之中,用于解釋和執(zhí)行js腳本。

javascript依賴于什么支持

前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)
API 文檔、設(shè)計(jì)、調(diào)試、自動化測試一體化協(xié)作工具:點(diǎn)擊使用

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

javascript依賴于底層js引擎的支持。

javascript運(yùn)行在瀏覽器,主要依靠瀏覽器的js引擎解釋執(zhí)行js代碼。其他帶有js引擎的軟件也可以運(yùn)行js,但是一般js和網(wǎng)頁關(guān)系較大,所以一般在瀏覽器當(dāng)中運(yùn)行。

javascript引擎

JavaScript引擎是一個專門處理JavaScript腳本的虛擬機(jī),一般會附帶在網(wǎng)頁瀏覽器之中,用于解釋和執(zhí)行js腳本。

著名的js引擎:

    Mozilla:SpiderMonkey引擎,世界第一款JavaScript引擎,有C/C++編寫,用于Mozilla Firefox 1.0~3.0版本

    Google:V8引擎,由C++/匯編語言編寫,用于chrome瀏覽器

    微軟:Chakra(查克拉,笑)引擎,用于Internet Explorer 9的32位版本

瀏覽器內(nèi)核和JS引擎的關(guān)系

以webkit為例:

javascript依賴于什么支持

V8引擎

1、V8引擎的原理

V8引擎是用C++編寫的Google開源高性能的JavaScript和WebAssembly引擎,用于Chrome和Node.js等。

它能夠?qū)崿F(xiàn)ECMAScript和WebAssembly,并在Windows7或者更高版本,macOS 10.12+和使用x64,IA-32,ARM或MIPS處理器的Linux系統(tǒng)上運(yùn)行。

V8引擎可以獨(dú)立運(yùn)行,也可以嵌入到任何C++應(yīng)用程序中運(yùn)行。例如,可以將V8引擎中使用Node.js看做是將將V8引擎嵌入到了應(yīng)用程序中,那么Node.js就具備了執(zhí)行JavaScript代碼的能力。

原理圖:

javascript依賴于什么支持

①、Parse模塊會將JavaScript代碼轉(zhuǎn)換成AST,這是因?yàn)榻忉屍鞑⒉恢苯诱J(rèn)識JavaScript代碼。如果函數(shù)沒有被調(diào)用,是不會被轉(zhuǎn)換為AST的

②、Ignition是一個解釋器,會將AST轉(zhuǎn)換為ByteCode。同時會收集TurboFan優(yōu)化所需的信息(比如函數(shù)參數(shù)的類型信息,有了類型才能真實(shí)的運(yùn)算)。如果函數(shù)只調(diào)用一次,Ignition將AST轉(zhuǎn)換為ByteCode

③、為什么最后轉(zhuǎn)化為字節(jié)碼,而不是直接轉(zhuǎn)化為機(jī)器碼?

因?yàn)镴S代碼在什么樣的環(huán)境下執(zhí)行并不固定,有可能是使用Windows環(huán)境、或者是mac環(huán)境、或者是Linux環(huán)境的瀏覽器上,也可能是在Node.js中,環(huán)境不固定,不同環(huán)境中就會有不同的CPU,不同的CPU擁有不同的CPU架構(gòu),不同的架構(gòu)能夠執(zhí)行的機(jī)器指令是不一樣的。

javascript依賴于什么支持

轉(zhuǎn)化為V8引擎規(guī)定好的字節(jié)碼,不管在什么環(huán)境下都可以執(zhí)行,是跨平臺的,最后V8引擎會把字節(jié)碼轉(zhuǎn)化匯編指令,再轉(zhuǎn)化為不同環(huán)境對應(yīng)的CPU指令。

但是每次都走這套流程,還是不夠方便。比如有一個函數(shù)是重復(fù)使用的,但是使用前面一套流程,每次使用這個函數(shù)的時候,都需要被轉(zhuǎn)化為字節(jié)碼,然后再變?yōu)镃PU指令,性能比較低,如果可以直接將這個函數(shù)變?yōu)闄C(jī)器指令保存下來,使用這個函數(shù)的時候,直接運(yùn)行機(jī)器指令,性能比較高,但是如果這個函數(shù)只運(yùn)行一次,就沒有必要轉(zhuǎn)化變?yōu)闄C(jī)器代碼保存下來,會浪費(fèi)空間。

④、使用TurboFan庫,是一個編譯器,會將字節(jié)碼編譯為CPU可以直接執(zhí)行的機(jī)器碼,他可以利用ignition來收集函數(shù)的執(zhí)行信息,了解到哪些函數(shù)執(zhí)行次數(shù)比較多,會將這類函數(shù)標(biāo)記為hot ,熱函數(shù),然后就會將這個函數(shù)轉(zhuǎn)換為優(yōu)化之后的機(jī)器指令,以后再使用這個熱函數(shù)的時候,不需要上面繁瑣的過程,直接執(zhí)行機(jī)器指令就行。

但是實(shí)際上機(jī)器碼也會被還原為ByteCode,這是因?yàn)槿绻罄m(xù)執(zhí)行函數(shù)的過程中,類型發(fā)生改變,之前優(yōu)化的機(jī)器碼并不能正確地處理運(yùn)算,就會逆向的轉(zhuǎn)換為字節(jié)碼。

⑤、Deoptimization: 比如有一個函數(shù)

function  sum(num1,num2){    num1+num2 }
登錄后復(fù)制

調(diào)用sum函數(shù)

sum(20,30) sum(28,30)
登錄后復(fù)制

如果傳入數(shù)字,調(diào)用sum函數(shù),需要做的工作就是對兩個數(shù)字進(jìn)行相加,執(zhí)行的機(jī)器指令永遠(yuǎn)是對這兩個數(shù)字進(jìn)行相加.
一旦改變傳入值的類型,如果變成字符串,那么這個函數(shù)的意思就是兩個字符串拼接。

sum("aaa","bbb")
登錄后復(fù)制

這兩種類型的傳入值執(zhí)行“+”操作對應(yīng)的機(jī)器指令是不同的,JavaScript是不會對傳入值的類型做檢測的,那么還是使用數(shù)字相加的機(jī)器指令,這次函數(shù)調(diào)用的結(jié)果是不能夠使用的。

但是V8引擎中提供了一種解決辦法Deoptimization過程,這個過程是,一旦發(fā)現(xiàn)在執(zhí)行機(jī)器指令時候,執(zhí)行的操作不一樣的時候,Deoptimization會反向優(yōu)化,又轉(zhuǎn)化為字節(jié)碼,執(zhí)行后續(xù)操作。

2、V8引擎的解析圖

javascript依賴于什么支持

V8執(zhí)行的細(xì)節(jié):

①、Blink將源碼交給V8引擎,Stream獲取到源碼并且進(jìn)行編碼轉(zhuǎn)換

②、scanner會進(jìn)行詞法分析,詞法分析之后會將代碼轉(zhuǎn)換為成tokens

③、tokens會被轉(zhuǎn)換為AST樹,經(jīng)過Parser和PreParser:

Parser就是直接將tokens轉(zhuǎn)換為AST樹架構(gòu);

PreParser預(yù)解析,為什么會需要預(yù)解析?

1)如上圖中的函數(shù)outer(),內(nèi)部有一個函數(shù)inner(),但是并沒有任何調(diào)用inner()的代碼,那么就意味著并不是所有的JavaScript代碼,都是一開始就被執(zhí)行。對所有的JavaScript代碼進(jìn)行解析,必定會影響網(wǎng)頁的運(yùn)行效率。

2)V8引擎實(shí)現(xiàn)了Lazy Parsing(延遲解析)的方案,作用是將不必要的函數(shù)進(jìn)行預(yù)解析,我只需要知道有這么個函數(shù)就行,也就是只解析暫時需要的內(nèi)容,對函數(shù)的全量解析在函數(shù)被調(diào)用的時候才會執(zhí)行。

3)例如上圖中函數(shù)outer中的inner函數(shù),它就是會執(zhí)行預(yù)解析。

④、生成AST樹之后,會被Ignition轉(zhuǎn)成字節(jié)碼,之后的過程就是代碼的執(zhí)行過程。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
精品视频91| 国产91欧美| 久久亚洲风情| 久久不射中文字幕| 日韩精品一级中文字幕精品视频免费观看| 一区二区视频欧美| 99精品在线免费在线观看| 免费在线小视频| 亚洲精品小说| 四虎在线精品| 国产精品极品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲二区视频| 亚洲欧洲午夜| 日韩国产一区二| 日本不卡一区二区三区| 久久97视频| 91精品蜜臀一区二区三区在线| 欧美精品羞羞答答| 亚洲青青久久| 麻豆高清免费国产一区| 色在线视频观看| 免费欧美一区| 婷婷综合成人| 成人三级高清视频在线看| 尹人成人综合网| 国产精品主播| 国产高清一区二区| 国产亚洲欧美日韩精品一区二区三区| 欧美精品二区| 亚洲不卡av不卡一区二区| 视频一区二区欧美| 精品美女在线视频| 国产农村妇女精品一区二区| 国产精品入口久久| 久久精品av| 欧美亚洲人成在线| 日韩久久精品| 少妇高潮一区二区三区99| 亚洲国产欧美日本视频| 亚州av日韩av| 九一成人免费视频| 粉嫩av一区二区三区四区五区 | 国产精品一区毛片| 激情综合网址| 国产欧美高清视频在线| 91精品啪在线观看国产18| 国产亚洲人成a在线v网站| 免费观看不卡av| 国产精品亚洲欧美日韩一区在线| 免费久久久久久久久| 精品久久美女| 亚洲精品韩国| 日韩国产一区| 国产伦精品一区二区三区视频| 欧美日韩国产传媒| 精品九九在线| 国产日韩精品视频一区二区三区| 日韩视频一区| 日韩欧美综合| 精品国产亚洲一区二区三区在线| 亚洲影院天堂中文av色| 欧美亚洲在线日韩| 水蜜桃精品av一区二区| 欧美一级二级视频| 亚洲男女自偷自拍| 午夜av成人| 精品久久久中文字幕| 亚洲欧美网站在线观看| 亚洲天堂成人| 精品久久精品| 91p九色成人| 热久久久久久久| 蜜桃国内精品久久久久软件9| 国产一区二区三区免费在线| 亚洲精品在线二区| 夜夜嗨一区二区三区| 久久九九电影| 日本在线高清| 亚洲女同av| 超碰99在线| av资源亚洲| se01亚洲视频 | 久久久亚洲一区| 岛国av免费在线观看| 捆绑调教美女网站视频一区| 国产探花在线精品| 欧美性www| 欧美日韩伊人| 国产探花一区| 国产毛片精品| 97精品国产99久久久久久免费| 免费在线视频一区| 日韩影院在线观看| 久久福利毛片| 日韩中文字幕一区二区三区| 日韩中文字幕不卡| 亚洲乱码久久| 欧美在线日韩| 久久午夜影院| 日韩欧美精品| 一区二区三区视频免费观看| 欧美日韩第一| 免费欧美在线视频| 日韩精品视频一区二区三区| 日韩国产91| 日本麻豆一区二区三区视频| 国产一卡不卡| 国产一区二区三区久久| 四虎4545www国产精品 | 日韩精品电影| av亚洲在线观看| 视频在线观看一区二区三区| 日本在线成人| 国产精品sm| 欧美国产先锋| 久久久久国产精品一区二区| 在线成人直播| 综合精品一区| 欧美国产极品| 欧美亚洲激情| 亚洲+小说+欧美+激情+另类| 国产精品美女久久久久久不卡| 精品国产亚洲日本| 免费精品国产| 欧美在线首页| 精品亚洲美女网站| 亚洲不卡视频| 精品中文在线| 欧美日韩激情在线一区二区三区| 91成人超碰| 日韩一区精品| 国产96在线亚洲| 欧美午夜不卡| 国产精品一区二区三区美女 | 欧美激情另类| 老牛国产精品一区的观看方式| 日韩av在线免费观看不卡| 岛国av在线网站| 亚洲毛片视频| 九色porny丨国产首页在线| 久久亚洲欧洲| 成人精品视频| 亚洲美洲欧洲综合国产一区 | 日韩不卡免费视频| 香蕉久久99| 国产精品亚洲综合在线观看| 在线日韩一区| 麻豆久久一区| 亚洲一区二区免费看| 精品视频一二| 亚洲深深色噜噜狠狠爱网站| 国产一区2区在线观看| 免费在线观看视频一区| 日韩黄色大片网站| 日韩国产91| 不卡在线一区| 免费在线亚洲| 综合国产精品| 欧美搞黄网站| 日韩不卡一区| 日韩国产欧美在线播放| 亚洲成av在线| 久久国产人妖系列| 欧美日韩第一| 精品三级在线| 日韩一区精品| 亚洲午夜黄色| 久久一区国产| 亚洲免费福利一区| 激情欧美国产欧美| 精品久久网站| 亚洲日本在线观看视频| 99视频精品视频高清免费| 国产精品亚洲一区二区在线观看| 亚洲色诱最新| 99精品小视频| 国产精品国产一区| 久久精品xxxxx| 亚洲一二av| 亚洲激情欧美| 五月激情久久| 91亚洲国产成人久久精品| 国产精品一区二区精品| 蜜桃视频一区二区| 日韩一级欧洲| 免费不卡中文字幕在线| 国产精品成人一区二区不卡| 国产精品亚洲欧美日韩一区在线| 亚洲欧美在线综合| 三级亚洲高清视频| 老司机久久99久久精品播放免费| 久久久精品久久久久久96 | 午夜国产一区二区| 一区二区三区四区日本视频| 国产精品第一| 国产精品一区二区免费福利视频 | 激情六月综合| 久久久精品久久久久久96| 吉吉日韩欧美|