• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. JavaScript引擎是什么

        時(shí)間:2024-10-06 11:19:04 JavaScript 我要投稿
        • 相關(guān)推薦

        JavaScript引擎是什么

          JavaScript引擎是一種為解釋和執(zhí)行JavaScript代碼而專門設(shè)計(jì)的流程虛擬機(jī)。將通過布局網(wǎng)頁(yè)使瀏覽器運(yùn)行的布局引擎和解釋,執(zhí)行代碼的較低水平的JavaScript引擎作對(duì)比是相當(dāng)重要的。以下是一些比較到位的闡述。

          JavaScript引擎到底是做什么的呢?

          當(dāng)一切就緒,JavaScript的基本工作就是將開發(fā)者寫的JavaScript代碼轉(zhuǎn)換成能被瀏覽器理解甚至能在應(yīng)用程序上運(yùn)用的最優(yōu)化的快捷代碼。事實(shí)上,JavaScriptCore稱自己是優(yōu)化的虛擬機(jī)。

          更確切地說,每一個(gè) JavaScript 引擎都實(shí)現(xiàn)了ECMAScript的一種版本,而JavaScript 是它的一種方言叫法。JavaScript引擎會(huì)隨著ECMAScript的發(fā)展而進(jìn)步,因?yàn)槿绱硕嗖煌囊娑家c不同的瀏覽器一起運(yùn)作,如headless browser, 或者像Node.js這樣的執(zhí)行環(huán)境。

          你可能對(duì)網(wǎng)頁(yè)瀏覽器很熟悉,但什么是headless browser呢?這是一種沒有形象的用戶交界面的網(wǎng)頁(yè)瀏覽器。它們擅長(zhǎng)對(duì)你的網(wǎng)頁(yè)產(chǎn)品進(jìn)行機(jī)械化的測(cè)試。PhantomJS.就是很好的例子。那Node.js又是什么呢?

          Node.js是一種允許你在服務(wù)器端運(yùn)用JavaScript的異步事件驅(qū)動(dòng)的框架。既然它們是由JavaScript驅(qū)動(dòng)的工具,它們也就應(yīng)當(dāng)受JavaScript引擎的驅(qū)動(dòng)。

          通過以上對(duì)虛擬機(jī)的定義,將JavaScript引擎稱為流程虛擬機(jī)也就是理所當(dāng)然的了。因?yàn)樗ㄒ坏哪康木褪且x取和編譯JavaScript代碼。然而這并不意味著它只是一種簡(jiǎn)單的引擎。舉個(gè)例子,JavaScriptCore有6個(gè)分區(qū)來分析、翻譯、優(yōu)化以及垃圾收集JavaScript代碼。

          這是如何運(yùn)作的?

          當(dāng)然,這取決于引擎。WebKit的JavaScriptCore以及谷歌的V8引擎之所以能引起我們的興趣是因?yàn)镹ativeScript對(duì)它們起了杠杠作用。這兩種引擎不同程度地掌握著過程碼。

          JavaScriptCore是通過一系列的步驟去編譯和優(yōu)化腳本。

          它會(huì)對(duì)詞匯進(jìn)行分析,將其分解成一系列的記號(hào),或附上某些既定的意義。這些記號(hào)之后會(huì)被分析程序理出句法,并嵌入句法樹。之后4個(gè)JIT(及時(shí))程序開始運(yùn)行、分析和執(zhí)行那些分析程序產(chǎn)生的字節(jié)碼。

          嗯?簡(jiǎn)單講,JavaScript引擎將你的源代碼分解成串(又叫做分詞),再將那些串轉(zhuǎn)換成為編譯器能夠理解的字節(jié)碼,然后將其執(zhí)行。

          用C++編寫的谷歌的V8引擎也能編譯和解釋JavaScript源代碼,掌握內(nèi)存記憶配置且可垃圾回收殘留物。

          它由2個(gè)能夠?qū)⒃创a直接轉(zhuǎn)換成計(jì)算機(jī)代碼的編譯器組成。

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

          Crankshaft:輸出快速,優(yōu)化代碼的慢速編譯器。

          如果Crankshaft認(rèn)為由Full-codegen產(chǎn)生的不夠優(yōu)化的代碼需要優(yōu)化,它將會(huì)取而代之,這就是“crankshafting”流程。

          有趣的事實(shí):機(jī)軸是運(yùn)用在自動(dòng)化產(chǎn)業(yè)中內(nèi)部氧化引擎里的一個(gè)完整的部分。這種眾所周知的引擎在更高級(jí)的載體也就是V8中有所運(yùn)用。

          若計(jì)算機(jī)代碼是由編譯過程產(chǎn)生的,那么這個(gè)引擎就會(huì)在瀏覽器中顯示出所有的ECMA標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)類型、操作員、客體和功能,或者任何需要用到它們的運(yùn)行環(huán)境,如NativeScript.

          JavaScript引擎有哪些呢?

          市場(chǎng)上有許多令人暈眩的JavaScript引擎要去分析、理解和執(zhí)行客戶端的代碼。隨著每一種瀏覽器新版本的出現(xiàn),JavaScript引擎有時(shí)會(huì)做出一些改變或優(yōu)化來和JavaScript代碼編譯中的技術(shù)水平相契合。

          為了避免被那些引擎的各種名字搞暈,請(qǐng)記住,有許多市場(chǎng)營(yíng)銷計(jì)劃會(huì)研究到它們強(qiáng)調(diào)的引擎和瀏覽器。在這份實(shí)用的JavaScript編輯器的分析報(bào)告中,作者諷刺到:萬(wàn)一你不理解,你要明白在編譯器中,差不多有37%是由市場(chǎng)因素組成的,品牌重塑是你在編輯器上可以做的不多的事情之一,因此引擎被賦予了迎合市場(chǎng)的名字:SquirrelFish, Nitro, SFX…

          在市場(chǎng)因素對(duì)為引擎進(jìn)行命名以及重命名有著重要影響的情況下,對(duì)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,也被重塑成SquirrelFishExtreme品牌,又叫做Nitro。然而,在WebKit安裝啟用下的JavaScript的確也被稱為JavaScript引擎(如Safari)。

          **iOS開發(fā)者應(yīng)該認(rèn)識(shí)到Mobile Safari包含Nitro,但UIWebView并不包括JIT編譯器,所以這個(gè)過程會(huì)比較慢。然而,有了iOS8系統(tǒng),開發(fā)者可以運(yùn)用包含Nitro的WKWebView來大幅度加速這個(gè)運(yùn)行速度。Hybrid App的開發(fā)者應(yīng)該會(huì)覺得比較輕松。

          之所以有做出將io.js從Node.js中分離出來的一個(gè)因素是和可以支持這個(gè)項(xiàng)目的V8版本有關(guān)。這將會(huì)是一個(gè)挑戰(zhàn),就像這邊所列出來的一樣。

        【JavaScript引擎是什么】相關(guān)文章:

        javascript是什么意思10-08

        javascript函數(shù)到底是什么04-29

        理解javascript中的with關(guān)鍵字是什么意思10-11

        調(diào)用javascript08-02

        對(duì)javascript的理解08-08

        javascript的方法08-09

        Javascript模板07-29

        編寫JavaScript函數(shù)10-24

        Javascript 函數(shù)的學(xué)習(xí)09-11

        Javascript的this用法簡(jiǎn)述08-15

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 色婷婷六月亚洲6月中文字幕 | 亚洲国产无在线观看 | 日本三级国产精品一卡两卡 | 婷婷精品视频在线中文字幕 | 色综合色综合久久综合频道88 | 日本国产中文字幕欧美 |