亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

寫給小白的JavaScript引擎指南

2019-11-20 11:04:47
字體:
來源:轉載
供稿:網友

關于本文標題,我并不認為參與寫或者讀本文的人是白癡。但是有時某個話題會讓你覺得自己就像個白癡一樣,而 JavaScript 引擎就是這些話題之一,至少對于我來說是這樣。

有時編寫 Web 應用的代碼會感覺充滿魔力,因為我們只是寫了一系列字符,就能在瀏覽器里看到效果了。但是理解魔法背后的技術,可以幫助你更好地提高編程技巧。至少當你試圖解釋在 JavaScript 驅動的 web 或移動應用的幕后發生了什么的時候,會覺得自己不那么白癡了。

很多年前,那是我還是個研究生講師,向一個教授抱怨還沒有掌握那些特別難懂的法語語法點,可以教給我的本科學生。我記得當時她說的話:“有時候,學習某個事物的唯一方式就是教授它?!?/p>

嘗試向工程師解釋 NativeScript 是如何通過 JavaScript 引擎在幕后工作、在運行時連接調用原生的 APIs――面對這樣一件復雜的工作很容易在一片雜草中迷失方向。事實上,任何 JavaScript 開發者都應該對我們每天使用的這門技術基礎的引擎感到好奇。現在我們一起來仔細分析下 JavaScript 引擎到底做了什么,為什么不同的平臺使用不同引擎,多年來它們是如何發展的,以及作為開發者我們為什么要關注這些。

首先,一些專業術語

“JavaScript 引擎”通常被稱作一種 虛擬機?!疤摂M機”是指軟件驅動的給定的計算機系統的模擬器。有很多類型的虛擬機,它們根據自己在多大程度上精確地模擬或代替真實的物理機器來分類。

例如,“系統虛擬機”提供了一個可以運行操作系統的完整仿真平臺。Mac 用戶很熟悉的 Parallels 就是一個允許你在 Mac 上運行 Windows系統虛擬機。

另一方面,“進程虛擬機”不具備全部的功能,能運行一個程序或者進程。Wine 是一個允許你在 Linux 機器上運行 Windows 應用的進程虛擬機,但是并不在 Linux 中提供完整的 Windows 操作系統。

JavaScript 虛擬機是一種進程虛擬機,專門設計來解釋和執行的 JavaScript 代碼。

注意:要區別在瀏覽器中排布頁面布局的 布局引擎 和解釋和執行代碼的底層 JavaScript 引擎是非常重要的。在 這里 可以找到一個很好的闡釋。

那么,確切來講,到底什么是 JavaScript 引擎,它做了什么?

JavaScript 引擎的基本工作是把開發人員寫的 JavaScript 代碼轉換成高效、優化的代碼,這樣就可以通過瀏覽器進行解釋甚至嵌入到應用中。事實上,JavaScriptCore 自稱為“優化虛擬機”。

更準確地講,每個 JavaScript 引擎都實現了一個版本的 ECMAScript,JavaScript 是它的一個分支。隨著 ECMAScript 的不斷發展,JavaScript 引擎也不斷改進。之所以有這么多不同的引擎,是因為它們每個都被設計運行在不同的 web 瀏覽器、headless 瀏覽器、或者像 Node.js 那樣的運行時環境中。

你也許熟悉 web 瀏覽器,那什么是 headless 瀏覽器呢?它是一個沒有圖形用戶界面的 web 瀏覽器。它們在對 web 產品進行自動化測試時十分有用。一個很棒的例子就是 PhantomJS。那 Node.js 又和 JavaScript 引擎有什么關系?Node.js 是一個異步的、事件驅動的框架,讓你在服務器端可以使用 JavaScript。既然他們是驅動 JavaScript 的工具,所以它們也是由 JavaScript 引擎驅動。

按照上述關于虛擬機的定義,把 JavaScript 引擎稱作進程虛擬機就很好理解了,因為它的唯一的目的就是讀取和編譯 JavaScript 代碼。這并不意味著它只是個簡單的引擎。比如,JavaScriptCore 就有六個“構建模塊”可以分析、解釋、優化、垃圾回收 JavaScript 代碼。

它是如何工作的?

當然,這決定于引擎。吸引我們注意的兩個主要的引擎都利用了 NativeScript ,它們分別是 WebKit 的 JavaScriptCore 和 Google 的 V8 引擎。這兩個引擎使用不同的方式處理代碼。

JavaScriptCore 執行 一系列步驟 來解釋和優化腳本:

它進行詞法分析,就是將源代碼分解成一系列具有明確含義的符號或字符串。
然后用語法分析器分析這些符號,將其構建成語法樹。
接著四個 JIT(Just-In-Time)進程開始參與進來,分析和執行解析器所生成的字節碼。
什么?簡單來說,JavaScript 引擎會加載你的源代碼,把它分解成字符串(又叫做分詞),再 把這些字符串轉換 成編譯器可以理解的字節碼,然后執行這些字節碼。

Google 的 V8 引擎 是用 C++ 編寫的,它也能夠編譯并執行 JavaScript 源代碼、處理內存分配和垃圾回收。它被設計成由兩個編譯器組成,可以把源碼直接編譯成機器碼:

Full-codegen:輸出未優化代碼的快速編譯器
Crankshaft: 輸出執行效率高、優化過的代碼的慢速編譯器
如果 Crankshaft 確定需要優化的代碼是由 Full-codegen 生成的未優化代碼,它就會取代 Full-codegen,這個過程叫做“crankshafting”。

一旦編譯過程中產生了機器代碼,引擎就會向瀏覽器暴露所有的數據類型、操作符、對象、在 ECMA 標準中指定的函數、或任何運行時需要使用的東西,NativeScript 就是如此。

有哪些 JavaScript 引擎?

有一大堆令人眼花繚亂的 JavaScript 引擎可以用來解釋、分析和執行你的客戶端代碼。每個瀏覽器版本發布時,它的 JavaScript 引擎都可能有所改變或優化以跟上 JavaScript 代碼執行技術的狀況的變化。

你還沒被這些瀏覽器引擎的名字完全弄糊涂之前,請記住很多市場營銷的元素被加入了這些引擎和以它們為基礎的瀏覽器。這篇對 JavaScript 編譯 十分有用的分析 中,作者諷刺地指出:“你所不知道的是,編譯器大約有 37% 是由市場營銷構成的,對編譯器進行品牌重塑也是你能做的為數不多的事情之一,智慧的市場營銷,故而有了一系列名字:SquirrelFish、Nitro、SFX……”。

在牢記營銷對命名和重命名這些引擎的影響的同時,注意到幾件在 JavaScript 引擎發展史上的重大事件是很有用的。我為你做了一個便于理解的圖表:

Browser, Headless Browser, or Runtime JavaScript Engine
Mozilla Spidermonkey
Chrome V8
Safari JavaScriptCore
IE and Edge Chakra
PhantomJS JavaScriptCore
HTMLUnit Rhino
TrifleJS V8
Node.js V8
Io.js* V8

*JavaScriptCore 被改寫為 SquirrelFish,升級版本為 QuirrelFish Extreme,也叫做 Nitro。然而,構成 Webkit 實現基礎的 JavaScript 引擎就是 JavaScriptCore(比如 Safari)。

**iOS 開發者應該要知道移動設備的 Safari 使用 Nitro,但是 UIWebView 不包括 JIT 編譯,所以體驗會慢一些。然而開發人員可以在 iOS8 中使用包含 Nitro 的 WKWebView,使用體驗 明顯 變快?;旌弦苿討贸绦虻拈_發人員應該能松口氣了。

*最終 io.js 從 Node.js 分離開的原因之一就是為了支持 V8 版本的引擎。這仍然是一個挑戰,正如 這里 講述的。

我們為什么要關注?

JavaScript 引擎的代碼解析和執行過程的目標就是在最短時間內編譯出最優化的代碼。

最重要的是,這些引擎的演進與我們對發展 web 和 移動平臺的不斷探究息息相關,讓它們盡可能具有高性能,是相輔相成的。為了追蹤這種演進,你可以看到各種各樣的引擎在基準圖中是如何表現的,就好像 arewefastyet.com 總結的。例如,比較 Chrome 在搭載 V8 引擎與 non-Crankshafted 引擎時的表現就很有趣。

任何一個 web 開發者都要意識到,我們努力編寫、調試和維護的代碼在不同瀏覽器中執行效果必然有所差異。為什么某段代碼在一個瀏覽器上工作得很慢,但在另一個上卻快得多?

同樣地,移動開發者,尤其是使用 webview 顯示頁面內容的混合移動應用開發者,或者那些使用像 NativeScript 這種運行時環境的開發者,想知道是什么引擎在解釋執行他們的 JavaScript 代碼。移動 web 開發者應該注意到那些小小設備上的瀏覽器所具備的各種局限性和可能性。作為一個想持續發展的 web、移動或應用程序開發人員,時刻關注 JavaScript 引擎的變化會帶給你超值回報。

總結:

js 中的基本數據類型 undefined null boolean number string
js 中的一種復雜數據類型 object  它是所有對象的基礎類型
js 和其他語言一樣擁有9種基本的控制語句
js 中的函數無需指定返回值,實際上未指定返回值的函數返回的是undefined
js 中的參數可以隨意的傳遞  注意arguments[] 數組 它可以幫助你
js 中的函數是不能重載的,但是你可以模仿。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品一区二区| 日韩在线中文字幕| 亚洲黄色有码视频| 欧美精品久久久久久久免费观看| 亚洲国产精品人人爽夜夜爽| 国产小视频国产精品| 亚洲性日韩精品一区二区| 日本a级片电影一区二区| 8090成年在线看片午夜| 青青久久av北条麻妃海外网| 最近中文字幕日韩精品| 日韩精品在线视频美女| 国产日韩在线一区| 欧美性色视频在线| 亚洲女人天堂视频| 欧美性黄网官网| 91精品国产成人| 国产精品视频一区国模私拍| 欧美性猛交xxxx乱大交蜜桃| 亚洲欧美视频在线| 国产精品久久久久久久久久尿| 久久男人资源视频| 久久精品中文字幕免费mv| 亚洲一区二区少妇| 欧美在线视频观看| 国产成人一区二区在线| 91精品视频大全| 欧美日韩一区二区在线| 久久亚洲春色中文字幕| 国产精品日韩电影| 亚洲欧美国产一本综合首页| 欧美视频免费在线观看| 精品在线欧美视频| 在线免费看av不卡| 欧美黑人国产人伦爽爽爽| 欧美性猛交xxxx黑人猛交| 久久亚洲一区二区三区四区五区高| 久久久久久中文字幕| 成人夜晚看av| 亚洲国产高清福利视频| 中文字幕一区日韩电影| 一区二区三区在线播放欧美| 热99精品只有里视频精品| 一区二区三区无码高清视频| 国产在线视频91| 欧美日韩午夜视频在线观看| 亚洲美女av电影| 久久精品福利视频| 国产精品三级美女白浆呻吟| 欧美一区二粉嫩精品国产一线天| 国产亚洲精品久久久久动| 国产成人a亚洲精品| 久久久国产视频91| 日韩一区二区在线视频| 国产精品久久久久99| 最新亚洲国产精品| 国产精品天天狠天天看| 91精品在线国产| 欧美小视频在线| 中文字幕视频一区二区在线有码| 69精品小视频| 欧美日韩亚洲天堂| 久久不射电影网| 日韩免费观看高清| 久久激情视频久久| 欧美中文字幕在线观看| 成人免费在线视频网址| 亚洲va码欧洲m码| 亚洲国产精品成人va在线观看| 欧美亚洲一区在线| 狠狠躁天天躁日日躁欧美| 欧美噜噜久久久xxx| 国产精品日韩精品| 欧美夫妻性生活xx| 亚洲老司机av| 亚洲精品成人久久| 日韩精品视频观看| 日本91av在线播放| 日韩a**中文字幕| 亚洲一区二区久久| 久久久精品2019中文字幕神马| 久久久久这里只有精品| 一本久久综合亚洲鲁鲁| 欧美国产乱视频| 日韩国产在线看| 亚洲美女性生活视频| 国产精品久久久久影院日本| 日韩不卡在线观看| 8090理伦午夜在线电影| 国产成人拍精品视频午夜网站| 国产精品亚洲美女av网站| 777国产偷窥盗摄精品视频| 国产日产欧美精品| 国产美女久久久| 精品国产91久久久久久| 久久久久久999| 亚洲欧美国产va在线影院| 欧美激情国产精品| 欧美视频免费在线| 亚洲伊人第一页| 精品久久久久久亚洲国产300| 中文字幕日韩专区| 亚洲欧美综合v| 欧美成人免费在线观看| 欧美性猛交xxxx免费看| 欧美日韩国产精品一区二区不卡中文| 久久九九国产精品怡红院| 日韩精品有码在线观看| 91精品国产亚洲| 日本最新高清不卡中文字幕| xxxxxxxxx欧美| 国产日韩欧美91| 免费99精品国产自在在线| 欧美成人精品激情在线观看| 欧美中文字幕在线| 91在线高清视频| 国产拍精品一二三| 日本高清不卡在线| 亚洲免费精彩视频| 久久人体大胆视频| 欧美日韩在线影院| 亚洲国产精久久久久久| 国产精品久久久久aaaa九色| 国产成人一区二区三区| 成人福利在线观看| 91精品国产高清久久久久久91| 69国产精品成人在线播放| 欧美亚洲另类制服自拍| 一区二区欧美在线| 国产精品美女久久久久久免费| 亚洲最大的网站| 国产成人在线一区二区| 精品日本高清在线播放| 深夜福利一区二区| 久久全国免费视频| 午夜精品久久久久久久白皮肤| 日韩精品亚洲元码| 久久精品国产清自在天天线| 日韩精品在线观看视频| 久久97精品久久久久久久不卡| 亚洲第一福利视频| 久久久爽爽爽美女图片| 97在线观看免费高清| 日本高清视频精品| 亚洲欧美制服丝袜| 精品久久久久久久久久久久久| 亚洲午夜未满十八勿入免费观看全集| 日韩av网址在线观看| 最近2019中文字幕mv免费看| 国产在线日韩在线| 亚洲成人激情小说| 亚洲欧美中文字幕| 欧美日韩午夜激情| 久久久99免费视频| 日韩av电影国产| 色与欲影视天天看综合网| 欧美亚洲另类激情另类| 中文字幕亚洲天堂| 亚洲精品在线不卡| 日韩欧美在线免费观看| 欧美日韩国产第一页| 欧美成人午夜剧场免费观看| 国产精品久久久久久久久久久久久| 亚洲精品视频在线观看视频|