作者dotZu (良牙)
看板Browsers
標題Re: [-Fx-] Firefox 22 正式版用戶特性速覽
時間Sun Jul 7 23:27:34 2013
※ 引述《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