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