2012-03-21 85 views
1

這個問題的第一部分實際上是基於我一直在整個下午進行的以JavaScript爲中心的研究進行確認的請求。如果我對這些項目有任何不正確的地方,請糾正我!瀏覽器如何支持JavaScript

  • ECMA是官方標準機構「堅持」一個希望支持JavaScript(全部/大部分做的)JavaScript
  • 任何瀏覽器中,必須包含某種解釋的(是什麼呢?)引擎深入瀏覽器代碼
  • 當某人將啓用JavaScript的瀏覽器指向包含JavaScript代碼的URI時,該瀏覽器將JS文件與HTML,CSS等一起下載,運行JS通過這個解釋器,並且由此產生的輸出影響頁面最終呈現的方式

除了這些項目,我還聽說過像JavaScript「插件」或瀏覽器可以具有的模塊。什麼是這些插件/模塊,以及爲什麼瀏覽器需要它們,如果它們符合ECMA並且已經包含JS解釋器?

在此先感謝!

+0

沒有代碼相關的問題,應該移動? – 2012-03-21 22:11:27

+0

http://www.mozilla.org/rhino/ – RTulley 2012-03-21 22:13:39

+0

@RTulley'rhino'是關於'javascript',但不是關於瀏覽器。 – kirilloid 2012-03-21 22:18:34

回答

2
  • 的ECMA是官方的標準機構,用於設置的ECMAScript標準的JavaScript其實現。 ActionScript也是如此。 ECMAScript涵蓋了該語言的所有編程要點和基本結構。

  • ECMA規範不包括面向瀏覽器的API,如DOM。這由W3C DOM標準涵蓋,旨在定義一種語言中立的API。自IE 6以來,IE一直相當支持ECMA規範,而在IE9之前幾乎完全忽略了自己專有BS的DOM內容。

  • 該規範本身只是一組規則,規定語言應該如何工作。只要你寫了相同的東西,並且給定的瀏覽器的解釋器給出了規範定義的預期結果,ECMA就符合所考慮的任何版本。

  • 解釋器解析並標記您寫入的實際文本,並將其轉換成指令,供瀏覽器的運行時環境讀取。現代瀏覽器運行實際的JIT編譯器,它在執行時將你的JS實際轉換爲字節碼,以便瀏覽器運行時環境本身不必翻譯。

  • 大多數瀏覽器緩存js文件的實際二進制文件。因此,鏈接到同一服務器位置的同一個域上的頁面在新頁面鏈接到該頁面時不必下載相同的文件兩次。這與任何資源(圖像,css文件等)都是一樣的。我不認爲他們緩存任何解釋的結果,但我認爲在JIT的情況下,某些預執行的結果例行公事(JIT製作基本上)可能會被留在記憶中(我的觀點純粹是猜測 - 但它似乎有點兒不錯)。

  • 我們對於插件,框架,工具,庫等詞語的使用方面一直有點快和鬆散......通常都只是JavaScript。你可以通過鏈接文件或者像其他任何JS一樣剪切和粘貼到現有的文件中來「插入」它們。然而,通過插件,人們通常意味着它可以與一些現有的預製JS一起使用,比如JQuery,它往往通過向它返回的對象添加方法來擴展它(JQuery只是一個很大的花哨功能,可以構建和返回相同的對象,每次你基本上開火)。圖書館往往是一大堆預先定義的方法來完成各種事情。就像倉庫的東西,你可以使用。我認爲JQuery更像是一個工具而不是庫,因爲它的重點更多地放在減少粗俗和標準化瀏覽器差異上。 JQ本身並沒有真正做到遠離核心JS方法的任何事情。這使它們變得更容易/更快速。它有一個UI庫,它基本上是一大組插件,它們實際上吐出了預製UI用戶界面元素,HTML,CSS等等。框架往往更像是一個在前端構建大規模應用程序類型結構的系統。這不僅僅是一堆方法可以調用,它是一種構建方法,旨在簡化穀倉 - 提升整個應用程序結構,同時跳過大量爲保持靈活性而需要做的更細粒度的工作(作爲結果框架通常不是特別靈活,但並不意味着它們不可以)。

+0

令人驚歎的答案 - 正是我期待的 - 謝謝@Erik! – IAmYourFaja 2012-03-22 15:26:22

4
  • ECMA是執行JS的「標準」的標準組織。他們保持語言的一致性和記錄(雖然知道它的歷史,但他們並沒有做好這項工作作爲一個「標準組織」)

  • JavaScript引擎是嵌入到瀏覽器中的一個軟件來解析JavaScript源代碼碼。這就是將你的JavaScript變成屏幕(和屏幕外)的動作。例如V8(Chrome),TraceMonkey(Firefox),Chakra(IE),Carakan(Opera)和Nitro/SquirrelFish(Safari)

  • 在上述情況發生之前,必須將JavaScript代碼引入瀏覽器(通常使用<script>標籤)

  • JavaScript插件/工具包只是程序員開發的代碼,用於輕鬆地完成任務。他們只是做你通常會編碼1000行的東西。這些代碼還通過提供跨瀏覽器的一致性來「改善」編程。插件/工具包的例子是jQuery(它是UI插件jQueryUI),YUI,Dojo等等。

  • 另一方面,瀏覽器擴展/插件「擴展」了瀏覽器的功能。例子是ADBlock(whick塊頁面廣告),FlashGet(下載Flash頁面上的文件)。這些人被編入瀏覽器而不是進入頁面。然而,最近,這些擴展是由JavaScript的原因,供電,它很容易編程

+0

謝謝約瑟夫!很好的答案!在插件的東西 - 你能提供一個特定的JS插件的例子,並解釋它做什麼,爲什麼它是必要的(而不是隻寫一個JS文件)?謝謝! – IAmYourFaja 2012-03-21 22:14:25

+0

在Firefox和Chrome中,所有插件都是用Javascript編寫的(Firefox插件也有這種特殊的類似HTML的東西,稱爲XUL,但這不重要)。插件中的Javascript訪問量比頁面上的Javascript多得多。例如,沒有Javascript可以寫入網頁,它會自動將其自身添加爲書籤,因爲瀏覽器製造商決不會允許它(如果一個壞的網站在訪問它時添加了100個書籤,那該怎麼辦?)。但是,如果需要,瀏覽器插件可以爲您訪問的每一頁添加書籤。 – machineghost 2012-03-21 22:18:31

+0

@machineghost你的意思是瀏覽器擴展我對嗎?好吧,我忘了那個。我雖然OP意味着增強頁面效果的插件,比如jQuery插件。瀏覽器擴展程序是「插入」或「擴展」瀏覽器功能的軟件。今天的大多數擴展都是使用JavaScript本身進行編程的(因爲JS是一個衆所周知的程序,易於理解,與C++等相比)易於使用 – Joseph 2012-03-21 22:26:46