精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇給小白看的 JavaScript 引擎指南

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

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

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

嘗試向工程師解釋 NativeScript 是如何通過 JavaScript 引擎在幕后工作、 在運行時連接調(diào)用原生的 APIs——面對這樣一件復雜的工作很容易在一片雜草中迷失方向。事實上,任何 JavaScript 開發(fā)者都應該對我們每天使用的這門技術(shù)基礎(chǔ)的引擎感到好奇。現(xiàn)在我們一起來仔細分析下 JavaScript 引擎到底做了什么,為什么不同的平臺使用不同引擎,多年來它們是如何發(fā)展的,以及作為開發(fā)者我們?yōu)槭裁匆P(guān)注這些。

首先,一些專業(yè)術(shù)語

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

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

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

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


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


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

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

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


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


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

它是如何工作的?

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

JavaScriptCore 執(zhí)行 一系列步驟 來解釋和優(yōu)化腳本:

  1. 它進行詞法分析,就是將源代碼分解成一系列具有明確含義的符號或字符串。

  2. 然后用語法分析器分析這些符號,將其構(gòu)建成語法樹。

  3. 接著四個 JIT(Just-In-Time)進程開始參與進來,分析和執(zhí)行解析器所生成的字節(jié)碼。


什么?簡單來說,JavaScript 引擎會加載你的源代碼,把它分解成字符串(又叫做分詞),再 把這些字符串轉(zhuǎn)換 成編譯器可以理解的字節(jié)碼,然后執(zhí)行這些字節(jié)碼。


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

  1. Full-codegen:輸出未優(yōu)化代碼的快速編譯器

  2. Crankshaft: 輸出執(zhí)行效率高、優(yōu)化過的代碼的慢速編譯器

如果 Crankshaft 確定需要優(yōu)化的代碼是由 Full-codegen 生成的未優(yōu)化代碼,它就會取代 Full-codegen,這個過程叫做“crankshafting”。


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

有哪些 JavaScript 引擎?

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

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


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

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。然而,構(gòu)成 Webkit 實現(xiàn)基礎(chǔ)的 JavaScript 引擎就是 JavaScriptCore(比如 Safari)。

**iOS 開發(fā)者應該要知道移動設(shè)備的 Safari 使用 Nitro,但是 UIWebView 不包括 JIT 編譯,所以體驗會慢一些。然而開發(fā)人員可以在 iOS8 中使用包含 Nitro 的 WKWebView,使用體驗 明顯 變快。混合移動應用程序的開發(fā)人員應該能松口氣了。

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

我們?yōu)槭裁匆P(guān)注?

JavaScript 引擎的代碼解析和執(zhí)行過程的目標就是在最短時間內(nèi)編譯出***化的代碼。

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

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

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

責任編輯:王雪燕 來源: 博客園
相關(guān)推薦

2021-06-25 07:37:33

遞歸函數(shù)算法

2021-07-21 09:48:20

etcd-wal模塊解析數(shù)據(jù)庫

2021-07-12 10:36:36

Blazor組件入門

2022-05-05 08:16:47

Spark架構(gòu)Hadoop

2021-05-14 23:31:50

大數(shù)據(jù)計算機開發(fā)

2022-05-08 19:58:10

JSONPJavaScript

2019-04-26 13:25:06

服務(wù)器開發(fā)工具

2021-04-21 12:04:47

JS引擎流程

2022-03-24 12:28:03

React 17React 18React

2020-12-18 07:55:47

JavaScriptClassMyClass

2021-01-28 09:58:46

線程池線程Thread

2022-08-28 19:15:56

RabbitMQ性能優(yōu)化

2021-02-02 18:39:05

JavaScript

2020-10-22 08:25:22

JavaScript運作原理

2021-01-29 18:41:16

JavaScript函數(shù)語法

2021-06-04 09:56:01

JavaScript 前端switch

2020-11-10 10:48:10

JavaScript屬性對象

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2024-01-30 13:47:45

點贊
收藏

51CTO技術(shù)棧公眾號

国产精品久久久久一区二区国产 | 成人毛片视频网站| 欧美一级淫片免费视频魅影视频| 亚洲免费影视| 日韩中文字幕亚洲| 亚洲乱妇老熟女爽到高潮的片| 中文不卡1区2区3区| 国产精品国产a| 国产精品v欧美精品v日韩精品| 久久精品视频5| 欧美福利一区| 亚洲系列中文字幕| 亚洲av无码一区东京热久久| 国产福利亚洲| 午夜av一区二区三区| 亚洲免费视频一区| 天堂av中文字幕| 激情综合五月婷婷| 国产福利视频一区二区| 久久久久成人网站| 日韩在线精品| 精品亚洲夜色av98在线观看| 性生活在线视频| 日韩不卡视频在线观看| 亚洲成av人在线观看| 在线不卡日本| 国产中文在线观看| 99精品视频在线免费观看| 91日韩在线视频| 日韩乱码一区二区三区| 亚洲一区视频| 欧美精品久久久久久久久久| 亚洲天堂网av在线| 不卡中文字幕| 亚洲区一区二区| 亚洲一区和二区| 日本免费一区二区三区等视频| 欧美性猛交xxxxx水多| 妞干网在线观看视频| 国产成人午夜| 亚洲视频一二三| 亚洲激情电影在线| 国产精品99999| 久久九九久久九九| 久久国产精品亚洲va麻豆| 国产综合无码一区二区色蜜蜜| 激情综合色播五月| 国产欧美日韩中文| 国产又大又黄的视频| 秋霞午夜av一区二区三区| 欧洲中文字幕国产精品| 久久亚洲天堂网| 99热精品在线观看| 51精品国产黑色丝袜高跟鞋| 国产香蕉视频在线| aⅴ色国产欧美| 欧美怡红院视频一区二区三区| 日韩av一二三区| 99在线观看免费视频精品观看| 97国产精品久久| 少妇一级淫片免费放中国| 在线电影福利片| 久久精品人人爽人人爽| 狼狼综合久久久久综合网| 欧美特黄一级视频| 99精品久久99久久久久| 美乳视频一区二区| 国产高清视频在线播放| 国产精品丝袜91| 国产树林野战在线播放| 国产成人无吗| 亚洲成人免费在线观看| 成人免费观看cn| 国产精品av一区二区三区| 91成人网在线| 手机av在线网站| 亚洲日本va午夜在线电影| 亚洲黄色在线观看| 色噜噜日韩精品欧美一区二区| 黄色不卡一区| 美女国内精品自产拍在线播放| 国产成人无码aa精品一区| 亚洲天堂久久| 国产国语刺激对白av不卡| 一区二区自拍偷拍| 国产福利一区二区三区视频在线 | 国产精品第二页| 一级黄色大片免费| 国产成人亚洲精品狼色在线| 久久精彩视频| 91女主播在线观看| 亚洲午夜在线视频| www.xxx亚洲| 视频精品一区| 亚洲人成绝费网站色www | 亚洲va韩国va欧美va精品| 一女被多男玩喷潮视频| 男人天堂久久| 亚洲国产日韩欧美在线图片| 毛片久久久久久| 极品日韩av| 国产精品久久久久秋霞鲁丝 | 欧美日韩视频免费看| 精品日韩av一区二区| 精品无码人妻一区| 欧美777四色影| 国产精品69精品一区二区三区| 99在线无码精品入口| 2017欧美狠狠色| 三级在线免费观看| 欧美性理论片在线观看片免费| 51久久夜色精品国产麻豆| 91精品国产自产| 欧美不卡高清| 国产欧美最新羞羞视频在线观看| 天天干天天摸天天操| 亚洲精品videosex极品| 国产av人人夜夜澡人人爽| 白嫩白嫩国产精品| 俺去啦;欧美日韩| 国模私拍一区二区| 91蝌蚪porny九色| 国产91在线亚洲| 欧美天堂一区| 国产亚洲精品美女久久久| 九九热国产视频| 国产高清不卡二三区| 自拍偷拍一区二区三区| 日本欧美不卡| 亚洲欧美日韩天堂一区二区| 在线观看免费国产视频| 国产成人午夜片在线观看高清观看| 亚洲激情一区二区| 欧美不卡高清一区二区三区| 国产视频精品久久久| 国产精品变态另类虐交| 国产黄色精品视频| 色哟哟免费网站| 成人自拍视频| 久久精品影视伊人网| 影音先锋国产在线| 国产拍揄自揄精品视频麻豆| 凹凸日日摸日日碰夜夜爽1| 日韩mv欧美mv国产网站| 久久久天堂国产精品女人| 亚洲精品久久久久avwww潮水| 亚洲品质自拍视频网站| 久久6免费视频| 一级毛片免费高清中文字幕久久网| 国产精品入口福利| 永久av在线| 在线不卡中文字幕播放| 久久精品色妇熟妇丰满人妻| 麻豆精品一区二区av白丝在线| 婷婷久久青草热一区二区 | 成人黄色av网| 国产cdts系列另类在线观看| 日韩午夜精品视频| 久久久久久久久久久久久久免费看 | 国产裸体写真av一区二区| 成人在线免费视频| 欧美性大战久久久久久久蜜臀| 摸摸摸bbb毛毛毛片| 久久精品国产在热久久| 天天综合中文字幕| 亚洲无线观看| 欧美在线视频网| 国产日本在线观看| 欧美日韩一区二区三区在线看| 日韩免费av一区| 国产精品香蕉一区二区三区| 黄页网站在线观看视频| 综合综合综合综合综合网| 国产精品极品在线| 国产精品刘玥久久一区| 精品对白一区国产伦| 日韩欧美成人一区二区三区 | 一本一本久久a久久| 国产麻豆精品久久一二三| 精品人妻人人做人人爽| 亚洲va久久| 成人黄色免费片| 电影k8一区二区三区久久| 精品无人区太爽高潮在线播放 | 久久精品国产99久久6| 欧洲精品视频在线| 亚洲ab电影| 91青草视频久久| 亚洲一二三四| 久久久精品中文字幕| 少妇一级淫片免费看| 欧美亚洲国产一区二区三区va| 成人观看免费视频| 久久精品视频一区二区| 欧美性受xxxx黒人xyx性爽| 一区二区动漫| 中文字幕在线观看一区二区三区| 久久1电影院| 国产美女高潮久久白浆| 男人av在线播放| 精品国内亚洲在观看18黄| 视频国产在线观看| 91精品国产欧美一区二区| 91精品国产综合久久久蜜臀九色 | 老司机午夜网站| 国产精品亚洲片在线播放| 99久久免费国| 色诱色偷偷久久综合| 欧美一级在线播放| 肉体视频在线| 久久久精品免费| xxxxx日韩| 亚洲电影中文字幕| 国产高清精品软件丝瓜软件| 欧美在线影院一区二区| 天堂网一区二区三区| 亚洲欧美另类久久久精品| 欧美黄色一级生活片| av在线这里只有精品| 日本网站在线看| 蜜臀av一级做a爰片久久| 国产成人无码a区在线观看视频| 一区二区三区在线| 婷婷久久青草热一区二区 | 波多野结衣大片| 性久久久久久久久| 免费中文字幕在线观看| 亚洲免费资源在线播放| youjizz亚洲女人| 国产日韩欧美一区二区三区综合 | 久久99久久人婷婷精品综合 | 国产乱色在线观看| 中文字幕日韩在线视频| 国产高清免费av在线| 日韩电影网在线| 日批免费在线观看| 精品美女一区二区三区| 亚洲第一成人av| 欧美一级xxx| 精品国产亚洲一区二区麻豆| 欧美一区二区三区四区五区| 国产欧美一级片| 7777精品久久久大香线蕉| 国产精品伦理一区| 9191久久久久久久久久久| 国产精品欧美综合亚洲| 欧美日韩成人综合天天影院 | 成人在线视频免费| 国产精品久久久久av| 91天天综合| 国产精品午夜一区二区欲梦| 99热这里有精品| 91精品视频免费| 99视频这里有精品| 成人综合电影| 加勒比中文字幕精品| 免费看成人片| 精品国产一区二区三区av片| 亚洲精品一区二区毛豆| 国产精品久久久久久| 国产激情片在线观看| 亚洲精品社区| 国产成人久久777777| 日韩激情视频网站| 中文字幕日韩综合| 国产精品一区久久久久| 麻豆tv在线观看| 99精品1区2区| 美女av免费看| 一区二区三区精品| 偷偷操不一样的久久| 欧美亚洲丝袜传媒另类| 国产黄频在线观看| 日韩成人在线视频| av一本在线| 色综合久久88色综合天天看泰| 1234区中文字幕在线观看| 日本韩国欧美精品大片卡二| 成人毛片免费| 成人在线观看91| 国产精品片aa在线观看| 亚洲高潮无码久久| 国产一区导航| 黄色小视频免费网站| 丁香激情综合五月| 国产精品国产三级国产专业不 | 在线观看日韩中文字幕| 精品污污网站免费看| aaaa一级片| 亚洲午夜av电影| 国产成人l区| 国产激情久久久久| av在线亚洲色图| 亚洲成人一区二区三区| 欧美三级免费| 黄色一级二级三级| 成人国产精品视频| 人妻无码一区二区三区免费| 午夜精品一区二区三区三上悠亚 | 亚洲成av人影院在线观看| 超碰国产在线| 97久久精品国产| gogo大尺度成人免费视频| 久久综合给合久久狠狠色| 中文在线播放一区二区| 婷婷激情四射五月天| 成人国产在线观看| 一起操在线播放| 在线免费一区三区| 五月婷婷久久久| 欧美黑人国产人伦爽爽爽| 国模私拍国内精品国内av| 国产在线视频欧美一区二区三区| 婷婷综合激情| 一级黄色香蕉视频| 99久久久精品免费观看国产蜜| 日韩高清dvd碟片| 欧美无乱码久久久免费午夜一区| 先锋av资源站| 欧美激情在线狂野欧美精品| 国产95亚洲| 正在播放国产精品| 热久久免费视频| 成人无码av片在线观看| 欧美日韩中文字幕综合视频| 亚洲老妇色熟女老太| 久久偷看各类女兵18女厕嘘嘘 | 欧美蜜桃一区二区三区| 国产系列在线观看| 日韩av不卡在线| 午夜先锋成人动漫在线| 天堂…中文在线最新版在线| 国产成人免费视| 69av.com| 日韩欧美色电影| 污网站在线免费看| 91超碰在线免费观看| 我不卡影院28| 三级黄色片免费看| 亚洲免费电影在线| 国产叼嘿视频在线观看| 欧美老少做受xxxx高潮| 一区二区在线视频观看| 超碰人人爱人人| 丁香另类激情小说| 日本三级免费看| 精品中文视频在线| 激情亚洲影院在线观看| 色综合视频二区偷拍在线| 美女看a上一区| 小早川怜子一区二区的演员表| 91精品国产综合久久婷婷香蕉| 含羞草www国产在线视频| 91免费精品国偷自产在线| 欧美国产三区| 人妖粗暴刺激videos呻吟| 性做久久久久久久免费看| 少妇喷水在线观看| 国产z一区二区三区| 日本一二区不卡| 国产在线视频三区| 午夜欧美在线一二页| 邻居大乳一区二区三区| 国产精品第一视频| 亚洲国产精品久久久久蝴蝶传媒| 精产国品一二三区| 黄网站色欧美视频| yw视频在线观看| 97超碰人人模人人爽人人看| 国产一区91| 久久成人小视频| 日韩精品一区国产麻豆| 午夜裸体女人视频网站在线观看| 四虎一区二区| 国产91精品精华液一区二区三区| 最新中文字幕一区| 久久精品99久久久久久久久| 福利在线一区| 在线观看高清免费视频| 伊人一区二区三区| 日韩欧美在线观看一区二区| 国产在线观看不卡| 一区二区三区国产在线| 免费黄色激情视频| 亚洲成人av在线播放| 欧美亚洲人成在线| 欧洲精品一区二区三区久久| 欧美韩国日本综合| 免费国产黄色片| 国产日产欧美精品| 99精品视频免费全部在线| 欧美h片在线观看| 亚洲欧美日韩网| 8848成人影院| 色啦啦av综合| 粉嫩老牛aⅴ一区二区三区| 麻豆视频网站在线观看| 蜜桃视频在线观看成人| 国产激情视频一区二区在线观看| 无码人妻丰满熟妇精品|