前兩天在阿里云APP上看到了一則關(guān)于網(wǎng)頁上運(yùn)行Windows2000的消息《瀏覽器中可以運(yùn)行Window2000烤镐,WebAssembly 是 JavaScript 的末日熬甚?》。讓我著實(shí)興奮了一會苗沧,因?yàn)闉g覽器跑普通的桌面程序之前有所耳聞,但直接跑操作系統(tǒng)還是第一次遇到。自己親身體驗(yàn)了一把籍滴,除了速度很慢(畢竟是在瀏覽器里),其他方面還是非常不錯(cuò)的榴啸。另外見到了很多年沒見的windows2000孽惰,其年代感給人的感覺非常獨(dú)特。究竟是怎樣的東西鸥印,先點(diǎn)擊這里看一下效果:瀏覽器里運(yùn)行Windows2000勋功。
強(qiáng)烈建議在配置比較好的電腦上打開,因?yàn)闆]有一顆強(qiáng)大的心臟库说,跑不起如此大的程序狂鞋。
(居然可以訪問gg)
WebAssembly 是實(shí)現(xiàn)這項(xiàng)工程的核心技術(shù)。我第一次知道WebAssembly是在幾年前學(xué)習(xí)Erget的時(shí)候潜的,那時(shí)由于某些原因骚揍,對WebAssembly并沒有去做進(jìn)一步的了解。此時(shí)其以這種形式展現(xiàn)在眼前啰挪,使我覺得很有必要立刻深入地了解一下信不,因?yàn)橹庇X認(rèn)為這門技術(shù)不僅不會是JavaScript 的末日,將來還會和JavaScript一起大有作為亡呵。
什么是WebAssembly
首先抽活,我們有必要了解一下asm.js。2012年政己,Mozilla 的工程師 Alon Zakai 在研究 LLVM 編譯器時(shí)突發(fā)奇想:許多 3D 游戲都是用 C / C++ 語言寫的酌壕,如果能將 C / C++ 語言編譯成 JavaScript 代碼,它們不就能在瀏覽器里運(yùn)行了嗎歇由?眾所周知卵牍,JavaScript 的基本語法與 C 語言高度相似。于是沦泌,他開始研究怎么才能實(shí)現(xiàn)這個(gè)目標(biāo)糊昙,為此專門做了一個(gè)編譯器項(xiàng)目 Emscripten。這個(gè)編譯器可以將 C / C++ 代碼編譯成 JS 代碼谢谦,但不是普通的 JS释牺,而是一種叫做 asm.js 的 JavaScript 變體萝衩,性能差不多是原生代碼的50%。
之后Google開發(fā)了Portable Native Client没咙,也是一種能讓瀏覽器運(yùn)行C/C++代碼的技術(shù)猩谊。 后來可能是因?yàn)楸舜酥g有共同的更高追求,Google, Microsoft, Mozilla, Apple等幾家大公司一起合作開發(fā)了一個(gè)面向Web的通用二進(jìn)制和文本格式的項(xiàng)目祭刚,那就是WebAssembly牌捷。asm.js 與 WebAssembly 功能基本一致,就是轉(zhuǎn)出來的代碼不一樣:asm.js 是文本涡驮,WebAssembly 是二進(jìn)制字節(jié)碼暗甥,因此運(yùn)行速度更快、體積更小捉捅。從長遠(yuǎn)來看撤防,WebAssembly 的前景更光明。
WebAssembly官網(wǎng)的定義:
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications.
WebAssembly(縮寫 Wasm)是基于堆棧虛擬機(jī)的二進(jìn)制指令格式棒口。Wasm為了一個(gè)可移植的目標(biāo)而設(shè)計(jì)的寄月,可用于編譯C/C+/RUST等高級語言,使客戶端和服務(wù)器應(yīng)用程序能夠在Web上部署陌凳。
在導(dǎo)航條下方醒目的展示著“WebAssembly 1.0 has shipped in 4 major browser engines. ”剥懒。表明WebAssembly對現(xiàn)代瀏覽器支持非常友好。
大多數(shù)程序員會選擇使用C語言來編寫WebAssembly模塊合敦,并將其編譯成.wasm文件初橘。這些.wasm文件并不能直接被瀏覽器識別,所以它們需要一種稱為JavaScript膠接代碼(glue code充岛,用于連接相互不兼容的軟件組件)的東西來加載保檐。具體的開發(fā)操作,在此不做展開細(xì)述崔梗。有興趣的人可以在網(wǎng)上查閱到詳細(xì)的資料夜只。
WebAssembly結(jié)合日漸成熟的WebGL技術(shù),使得大型的游戲等應(yīng)用遷移到瀏覽器將逐漸成為可能蒜魄。WebAssembly官網(wǎng)上給了一個(gè)基于unity游戲引擎的小例子Unity WebGL Player | Tanks!扔亥,大家可以玩一玩。
簡單介紹到此谈为,希望你能有所收獲旅挤。
本文參考資料
- WebAssembly官網(wǎng)
- asm.js官網(wǎng)
- 瀏覽器中可以運(yùn)行Window2000,WebAssembly 是 JavaScript 的末日伞鲫?-聚能聊-云棲社區(qū)-阿里云
- WebAssembly 現(xiàn)狀與實(shí)戰(zhàn)
- asm.js 和 Emscripten 入門教程 - 阮一峰的網(wǎng)絡(luò)日志
- 前端高性能計(jì)算之二:asm.js & webassembly - WEB前端 - 伯樂在線
- WebGL粘茄、Asm.js和WebAssembly概念簡介 - 踏得網(wǎng)
- 在 NodeJS 中體驗(yàn) WebAssembly技術(shù) - CSDN博客
- 讓C代碼在瀏覽器中運(yùn)行——WebAssembly入門介紹 - CSDN博客