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