一個二進制的 Web 新世界
出于戰(zhàn)略性原因,IE始終對 WebGL 有復(fù)雜的感 情。Apple,Google,Mozilla以及Opera都已經(jīng)成為了WebGL工作組的成員,僅剩微軟處境極為尷尬。支持WebGL意味著自己苦心 經(jīng)營的DX被孤立在標(biāo)準(zhǔn)之外,不支持單獨自立門戶的話又是與標(biāo)準(zhǔn)為敵,更要被眾多開發(fā)者唾棄,如今微軟日漸勢弱,對于是否在IE10上支持WebGL,對 于微軟而言絕對將是一個“非常艱難的決定”。
然而就在這一系列關(guān)系還沒理清之際,微軟IE博客在12月1日發(fā)布了一篇 Working with Binary Data using Typed Arrays,顯然IE10將確實地支持Type Arrays,加上之前已經(jīng)支持的Chrome12以及Firefox7,三巨頭無疑即將把整個Web推進二進制的新世界。(當(dāng)然,國內(nèi)自然是遙遙無期)
不過諷刺的是,Typed Arrays卻是由WebGL定義引入的,隨后被標(biāo)準(zhǔn)所采納,包括FileAPI、XHR,甚至是Web Sockets都在考慮是否擴展以支持二進制數(shù)據(jù)的控制??梢娢④浀奶幘巢粌H僅是與一個WebGL這樣的眼中釘為敵,更重要的是,不管愿意不愿意,它都可 能必須對標(biāo)準(zhǔn)所采納的競爭對手的游戲規(guī)則低頭。
那么什么是Typed Arrays?完整的定義可以在WebGL里找到,同名文檔見 Typed Array Specification,而微軟指向的文章是ECMAScript.org Wiki上的同名詞條 Typed Arrays,我想應(yīng)該不是每個人都有興趣去瀏覽文檔,所以我就翻譯一部分概述內(nèi)容:
- 一種顯式的緩沖區(qū)類型 ArrayBuffer 被引入。其以明確的長度創(chuàng)建,并且在其生命周期內(nèi)都是固定長度。ArrayBuffer 中的內(nèi)容不能被直接訪問。
- 同時引入一系列的類型用以描述如何解析 ArrayBuffer 中的字節(jié)。比如,Int32Array 將 ArrayBuffer(或其分區(qū)段) 中的字節(jié)看作 32位帶符號整數(shù)解析。(譯注:即以32bit signed integers作視圖)
- 同一個ArrayBuffer可以有多個不同的視圖,以支持構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu),盡管有一定的難度。
- 引入 DataView 類型,用以對來自底層 ArrayBuffer的字節(jié)的基礎(chǔ)數(shù)據(jù)類型的任意的索引讀寫。
- 其目的是,在較小性能損失下,盡可能地做到原生字節(jié)的訪問,并同時保證安全。
說了這么多,不如直接看微軟給出的DEMO:Binary File Inspector,怎么說呢,看起來像UltraEdit的二進制視圖。終于,JS可以讀取二進制了!當(dāng)然僅限于瀏覽器支持的文件,不過當(dāng)前,這已經(jīng)足夠了。
相關(guān)的示例代碼上面的鏈接里都有,我就不在冗述。有一點我想提一下,就是“在眾多討伐聲中貌似已入暮年”的flash。
以前有人問我AS和JS主要能力上的區(qū)別的時候,我總是會把二進制讀寫放在很前面講,并非因為讀寫二進制就似乎無所不能,而是因為這確實是它們間的 主要區(qū)別之一。flash.utils 包里的 ByteArray 與今天提到的 命題何其相似,甚至在讀寫二進制控制方面AS仍然略強于JS,然放眼現(xiàn)在的flash移動版失利的形勢,各個方面flash都在被HTML5追趕。 flash雖然強雖然領(lǐng)先,但在標(biāo)準(zhǔn)之勢下,也難擋眾多蓄意或非蓄意的圍攻。這樣的情況也確確實實的發(fā)生在微軟身上:
今天,微軟你實現(xiàn)了源自WebGL而后標(biāo)準(zhǔn)化的 Typed Arrays。
明天,WebGL,微軟你能說不么?
【編輯推薦】