摘要:由于這些是驅(qū)動(dòng)的工具,因此它們由引擎提供支持。兩個(gè)主要引擎是的和的引擎。然后,四個(gè)即時(shí)進(jìn)程啟動(dòng),分析并執(zhí)行解析器生成的字節(jié)碼。簡(jiǎn)單來(lái)說(shuō),這個(gè)引擎獲取源代碼,將其分解為字符串,獲取這些字符串并將它們轉(zhuǎn)換為編譯器可以理解的字節(jié)碼,然后執(zhí)行它。
渲染引擎和JavaScript引擎
先從一張圖片來(lái)理解下這兩個(gè)引擎
一,渲染引擎:主要作用是解釋html和css,并繪制頁(yè)面;
每種瀏覽器的渲染引擎可能會(huì)不一樣,但都遵循W3C標(biāo)準(zhǔn)開(kāi)發(fā)而成,方便Web技術(shù)的互相兼容性;
比較常見(jiàn)的幾種渲染引擎
IE: Trident
Firefox: Gecko
Safari:Webkit
Chrome:Blink
二,JavaScript引擎主要作用是解釋并執(zhí)行JavaScript;
每種瀏覽器也會(huì)有不同的JavaScript引擎,但都遵循ECMAScript標(biāo)準(zhǔn)開(kāi)發(fā)而成,便于兼容JavaScript技術(shù)
比較常見(jiàn)的幾種JavaScript引擎
IE: Chakra
Firefox: TraceMonkey
Safari: Nitro
Chrome: V8
----- 段落來(lái)源
什么是JavaScript引擎?JavaScript引擎的基本工作是獲取開(kāi)發(fā)人員編寫(xiě)的JavaScript代碼,并將其轉(zhuǎn)換為可由瀏覽器解釋甚至嵌入到應(yīng)用程序中的快速優(yōu)化代碼。一般會(huì)附帶在網(wǎng)頁(yè)瀏覽器之中。
更確切地說(shuō),每個(gè)JavaScript引擎都實(shí)現(xiàn)了ECMAScript的一個(gè)版本,其中JavaScript是一種方言。隨著ECMAScript的發(fā)展,JavaScript引擎也在不斷發(fā)展。有很多不同的引擎,如:headless browser、Node.js和各種web瀏覽器。headless browser是指沒(méi)有圖形用戶界面的Web瀏覽器,可用于運(yùn)行針對(duì)Web產(chǎn)品的自動(dòng)化測(cè)試。一個(gè)很好的例子是PhantomJS。Node.js是一個(gè)異步的,事件驅(qū)動(dòng)的框架,允許在服務(wù)器端使用JavaScript。由于這些是JavaScript驅(qū)動(dòng)的工具,因此它們由JavaScript引擎提供支持。
JavaScript引擎如何工作?鑒于虛擬機(jī)的定義,將JavaScript引擎稱為流程虛擬機(jī)是有意義的,因?yàn)樗奈ㄒ荒康氖亲x取和編譯JavaScript代碼。這并不意味著它是一個(gè)簡(jiǎn)單的引擎。例如,JavaScriptCore有六個(gè)構(gòu)建塊,用于分析,解釋,優(yōu)化和垃圾回收。
JavaScript是如何工作的了?當(dāng)然,這取決于是什么引擎。兩個(gè)主要引擎是WebKit的JavaScriptCore和Google的V8引擎。這兩個(gè)引擎處理代碼的方式是不同的。
JavaScriptCore執(zhí)行一系列步驟來(lái)解釋和優(yōu)化腳本。它執(zhí)行詞法分析,將源分解為一系列具有已識(shí)別含義的標(biāo)記或字符串。然后解析器分析令牌的語(yǔ)法并將其內(nèi)置到語(yǔ)法樹(shù)中。然后,四個(gè)即時(shí)進(jìn)程啟動(dòng),分析并執(zhí)行解析器生成的字節(jié)碼。簡(jiǎn)單來(lái)說(shuō),這個(gè)JavaScript引擎獲取源代碼,將其分解為字符串,獲取這些字符串并將它們轉(zhuǎn)換為編譯器可以理解的字節(jié)碼,然后執(zhí)行它。
谷歌的V8引擎,用C ++編寫(xiě),也編譯和執(zhí)行JavaScript源代碼,處理內(nèi)存分配,垃圾收集剩余物。它的設(shè)計(jì)包括兩個(gè)編譯器,它們直接將源代碼匯編到機(jī)器代碼中。
一旦編譯過(guò)程產(chǎn)生機(jī)器代碼,引擎就會(huì)將ECMA標(biāo)準(zhǔn)中指定的所有數(shù)據(jù)類型,操作符,對(duì)象和函數(shù)暴露給瀏覽器或需要使用它們的任何運(yùn)行時(shí),如NativeScript。
這對(duì)開(kāi)發(fā)人員意味著什么?JavaScript引擎的代碼解析和執(zhí)行過(guò)程的目標(biāo)是在最短的時(shí)間內(nèi)生成最優(yōu)化的代碼。最重要的是,這些引擎的發(fā)展與開(kāi)發(fā)Web和移動(dòng)領(lǐng)域的過(guò)程平行,以使它們盡可能地運(yùn)行。
任何Web開(kāi)發(fā)人員都需要了解瀏覽器中固有的差異,這些瀏覽器顯示生成,調(diào)試和維護(hù)的代碼。更具體地說(shuō),理解為什么某些腳本在另一個(gè)瀏覽器上的運(yùn)行速度較慢,這一點(diǎn)很重要。
相關(guān)閱讀:
瀏覽器野史
瀏覽器是如何渲染網(wǎng)頁(yè)的
JavaScript引擎
javascript引擎基礎(chǔ)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100413.html
摘要:由于這些是驅(qū)動(dòng)的工具,因此它們由引擎提供支持。兩個(gè)主要引擎是的和的引擎。然后,四個(gè)即時(shí)進(jìn)程啟動(dòng),分析并執(zhí)行解析器生成的字節(jié)碼。簡(jiǎn)單來(lái)說(shuō),這個(gè)引擎獲取源代碼,將其分解為字符串,獲取這些字符串并將它們轉(zhuǎn)換為編譯器可以理解的字節(jié)碼,然后執(zhí)行它。 渲染引擎和JavaScript引擎 先從一張圖片來(lái)理解下這兩個(gè)引擎 showImg(https://segmentfault.com/img/bVb...
摘要:由于這些是驅(qū)動(dòng)的工具,因此它們由引擎提供支持。兩個(gè)主要引擎是的和的引擎。然后,四個(gè)即時(shí)進(jìn)程啟動(dòng),分析并執(zhí)行解析器生成的字節(jié)碼。簡(jiǎn)單來(lái)說(shuō),這個(gè)引擎獲取源代碼,將其分解為字符串,獲取這些字符串并將它們轉(zhuǎn)換為編譯器可以理解的字節(jié)碼,然后執(zhí)行它。 渲染引擎和JavaScript引擎 先從一張圖片來(lái)理解下這兩個(gè)引擎 showImg(https://segmentfault.com/img/bVb...
摘要:書(shū)接上文瀏覽器之硬件加速機(jī)制本章主要講解中廣泛使用的引擎和引擎。解釋器在某些引擎中,解釋器主要是接收字節(jié)碼,解釋執(zhí)行這個(gè)字節(jié)碼,同時(shí)也依賴?yán)厥諜C(jī)制等。 showImg(https://segmentfault.com/img/remote/1460000016359609); 微信公眾號(hào):愛(ài)寫(xiě)bugger的阿拉斯加如有問(wèn)題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問(wèn)題。 前言 此文章是我...
摘要:什么是中的調(diào)用棧調(diào)用棧就像是程序當(dāng)前執(zhí)行的日志。當(dāng)函數(shù)執(zhí)行結(jié)束時(shí),將從調(diào)用棧中出去。了解全局和局部執(zhí)行上下文是掌握作用域和閉包的關(guān)鍵??偨Y(jié)引擎創(chuàng)建執(zhí)行上下文,全局存儲(chǔ)器和調(diào)用棧。 原文作者:Valentino 原文鏈接:https://www.valentinog.com/blog/js-execution-context-call-stack 什么是Javascript中的執(zhí)行上下文...
摘要:推薦一些好用的游戲引擎開(kāi)發(fā)庫(kù)引言如果你是一個(gè)游戲開(kāi)發(fā)者,并且正在尋找一個(gè)可以與和無(wú)縫工作的游戲引擎。是另一個(gè)容易使用,適用于移動(dòng)設(shè)備和桌面的游戲引擎。是一個(gè)開(kāi)源的用來(lái)創(chuàng)建使用高級(jí)技術(shù)和服務(wù)的游戲引擎。用于建立游戲和繪圖引擎。 推薦一些好用的 HTML5 & JavaScript 游戲引擎開(kāi)發(fā)庫(kù) 0. 引言 如果你是一個(gè)游戲開(kāi)發(fā)者,并且正在尋找一個(gè)可以與 JavaScript 和 HT...
閱讀 1513·2019-08-30 15:44
閱讀 1971·2019-08-30 14:07
閱讀 2917·2019-08-30 13:56
閱讀 2374·2019-08-29 17:06
閱讀 1353·2019-08-29 14:13
閱讀 2105·2019-08-29 11:28
閱讀 3258·2019-08-26 13:56
閱讀 1974·2019-08-26 12:11