看板 Browsers 關於我們 聯絡資訊
※ 引述《kuro (クロ)》之銘言: : FW: http://blog.skeeterhouse.com/9963.html 蚊仔部屋 : Firefox 22.0 終於和我們見面了,這個版本最重要的特性之一便是 asm.js(代號 : OdinMonkey)的引入,利用它可以大幅加快 javascript 的性能。讓我們一起來看 : 看 Firefox 22.0 正式版的用戶特性吧。 : 一、默認開啟 WebRTC : 之前我們已經介紹過了 WebRTC 技術,它是一項面向未來的 HTML5 技術,允許用戶直 : 接通過網頁實現實時通信,跨平台且無需額外插件。例如,可直接無需插件利用攝像 : 頭、麥克風進行通話。在最新的 Firefox 當中,這項功能已經默認開啟了,與之有關 : 的 about:config 參數即: : media.peerconnection.enabled : 需要為 true : 更詳細介紹請參見:WebRTC comes to Firefox : https://hacks.mozilla.org/2013/06/webrtc-comes-to-firefox/ : 二、在高分辨率模式下自動放大文字和界面 : Firefox(Windows 平台)原先在高分辨率顯示模式下不會自動調整文字和界面縮放以 : 適應高分辨率,造成文字顯示太小。現在 Firefox 會自動調大文字和界面,與此有關 : 的 about:config 選項為: : layout.css.devPixelsPerPx : 默認為 -1,如要增大文字,將其調整為 1.0 或更大的值,如要減小,調整為 0.05 : 到 1.0 之間的值。 : 三、啟用 OdinMonkey(asm.js)以提高 Javascript 性能 : OdinMonkey 是一個新的優化 Javascript 編譯速度的編譯器(asm.js 編譯器), : 具體來說是一個底層的、專為 JavaScript 子集優化的即時編譯器。為何說它能提 : 高 js 編譯性能?簡單來說,如果一個程序是用 C++ 編寫的,那麼利用 asm.js, : 它可以直接編譯為 javascript 代碼,而不需要先編譯為比 C++ 更底層一些的代碼。 : 這麼做的好處就在於大幅提高 Javascript 性能,瀏覽器運行富媒體網頁,乃至 3D : 網頁遊戲將更加流暢。 : 在about:config 需保證 : javascript.options.asmjs : 為 true 這邊有誤解,因為 OdinMonkey 並不是新的即時編譯器(JIT Compiler)。 會造成這種誤解的原因,大概是因為前幾次都叫某某 SomethingMonkey, 所以有些人誤以為這次的 OdinMonkey 也和以前一樣。 傳統上來說,高階語言轉換為低階語言的方式分為兩種, 一種為直譯(interpret),另一種為編譯(compile)。 即時編譯(JIT compilation)則是介於直譯式與編譯式之間。 而 asm.js 顧名思義,是以成為 javascript 界的組合語言為目標。 asm.js 並不是一個新的語言,而是 javascript 的完全子集。 某種程度上,它是被人「發現」的,而不是發明出來,就像 JSON 一樣。 JSON 也同樣是 javascript 的子集,完全符合 javascript 語法。 雖然 asm.js 程式碼長得完全不像是人類手寫出來的 javascript, 不過仍然完全符合 javascript 語法,所以可以用現有瀏覽器來執行。 > 如果一個程序是用 C++ 編寫的,那麼利用 asm.js,它可以直接編譯為 > javascript 代碼,而不需要先編譯為比 C++ 更底層一些的代碼。 這段話有點不知道在講什麼,因為目前的 C-to-asm.js compiler, 確實需要「先編譯為比 C/C++ 更底層的代碼」。 目前的實作是利用現在很紅的編譯器基礎設施 LLVM 作為中介, 先將 C/C++ 編譯為 LLVM 的中介碼 LLVM IR, 然後再將 LLVM IR 編譯為 asm.js。 這段流程完成之後,我們會得到 asm.js 的程式檔(不是執行檔)。 把某個語言編譯為 Javascript,並非是全新未曾有過的概念, 已經有一些前人實際做過這類的事情,並且把這種技術用在實際的用途。 比如說 Google 的 GWT,就包括了一個 Java-to-javascript 編譯器。 那麼,我們跑完上述流程,拿到一個程式檔,我們要如何執行它呢? 很簡單,你拿到的程式檔,其實就是一個 javascript 程式檔, 所以就像以往一樣把它丟給瀏覽器,就可以跑了。 這也就是說,原本用 C/C++ 所寫的程式碼,可以在瀏覽器中執行。 可以跑,是一回事。跑多快,是另一回事。 OdinMonkey 這次的最佳化,也就是針對這些 C/C++ 轉換過來的程式碼。 asm.js 程式碼採用 Ahead-of-time 編譯為機器碼,藉此加快執行速度。 因此,它不會是 Just-in-time,而 OdinMonkey 也就不會是 JIT。 OdinMonkey 使用的仍然是原有的 JIT(目前的 JIT 叫做 IonMonkey)。 -- ※ ○○○ ○◎ ○※ ◎ ○ ○ ※◎ ◎ ◎◎※ ◎◎※ ◎ ◎○ ○※ 荻 南新東 新中 西新 新丁 新苑 四丁 四赤 國事 霞銀東 大淡御 本丁 後茗 新池 窪 阿高高 中野 新宿 宿目 宿前 谷目 谷坂 會堂 關座京 手路茶 鄉目 樂荷 大袋 01 佐圓圓 野坂 宿08 三09 御10 三11 12見 議前 151617 町町之 三21 園谷 塚25 谷寺寺 05上 07 附 14 1819水 2223 24 020304 06 丸之內線 13 20 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.139.4
Rplus:哇... 跨嚨謀... 07/08 00:19
mars90226:專業給推 07/08 00:20
CP64:專業內容推 長知識推 07/08 00:47
kuro:專業推! 下半段完全理解不能 Q_Q 07/08 01:01
typepeter:簡單來說,很多東西是把C/C++的程式轉成Javascript 07/08 08:14
typepeter:然後asm.js的技術能把它們最佳化成最適JIT的最終程式 07/08 08:15
typepeter:這樣IonMonkey在進行JIT時,會變得超快超有效率 07/08 08:15
coolcomm:推 07/08 10:23
coolcomm:難怪我之前都看不懂... 07/08 10:23
zenixls2:上一篇的確有些不知所云 之前有research到類似的project 07/08 11:36
zenixls2:做的跟這次的東西一模一樣 07/08 11:38
kuro:不要這樣嘛,上一篇的作者不見得有這方面的專業知識,翻譯解 07/08 13:41
kuro:釋自然不到位有瑕疵 07/08 13:42
kaoh08:所以是網頁開發者在用的 跟使用者沒關係摟? 07/09 05:22
o035016:太棒了 都看無 07/09 08:39