《WebAssembly標準入門》是2018年11月人民郵電出版社出版的圖書,作者是柴樹杉、丁爾男。
基本介紹
- 中文名:WebAssembly標準入門
- 作者:柴樹杉、丁爾男
- 出版時間:2018年11月30日
- 出版社:人民郵電出版社
- 頁數:200 頁
- ISBN:9787115500595
- 定價:49 元
內容簡介,序言,目錄,
內容簡介
作為一種新穎的網頁前端技術,WebAssembly的發展日新月異。本書基於已受瀏覽器普遍支持的WebAssembly極小可用特徵集,致力於通過簡單易懂的方式,從使用方法到虛擬機設計,講解WebAssembly的運行原理。極小可用特徵集只是快速疊代的起點,SIMD、多執行緒等更多特性將逐漸被添加到WebAssembly標準中。
在WebAssembly 大潮來臨之際,希望本書能為該技術在國內的推廣貢獻綿薄之力。
本書內容要點:
- WebAssembly 簡要介紹;
- 在JavaScript 中使用WebAssembly 模組的方法;
- WebAssembly 彙編語言及二進制格式;
- 使用高級語言開發WebAssembly 模組;
- WebAssembly 指令參考。
序言
某一天,有朋友向我推薦了一項新技術——WebAssembly。我認為這是一項值得關注的技術。
說WebAssembly是一門程式語言,但它更像一個編譯器。實際上它是一個虛擬機,包含了一門低級彙編語言和對應的虛擬機體系結構,而WebAssembly這個名字從字面理解就說明了一切——Web的彙編語言。它的優點是檔案小、載入快、執行效率非常高,可以實現更複雜的邏輯。
其實,我覺得出現這樣的技術並不令人意外,而只是順應了潮流,App的封閉系統必然會被新一代Web OS取代。但現有的Web開發技術,如JavaScript,前端執行效率和解決各種複雜問題的能力還不足,而WebAssembly的編譯執行功能恰恰能彌補這些不足。WebAssembly標準是在謀智(Mozilla)、谷歌(Google)、微軟(Microsoft)、蘋果(Apple)等各大廠商的大力推進下誕生的,目前包括Chrome、Firefox、Safari、Opera、Edge在內的大部分主流瀏覽器均已支持WebAssembly。這使得WebAssembly前景非常好。
WebAssembly是Web前端技術,具有很強的可移植性,技術的潛在受益者不局限於傳統的前端開發人員,隨著技術的推進,越來越多的其他語言的開發者也將從中受益。如果開發者願意,他們可以使用C/C++、Go、Rust、Kotlin、C#等開發語言來寫代碼,然後編譯為WebAssembly,並在Web上執行,這是不是很酷?它能讓我們很容易將用其他程式語言編寫的程式移植到Web上,對於企業級套用和工業級套用都是巨大利好。
WebAssembly的套用場景也相當豐富,如Google Earth,2017年10月Google Earth開始在Firefox上運行,其中的關鍵就是使用了WebAssembly;再如網頁遊戲,WebAssembly能讓HTML5遊戲引擎速度大幅提高,國內一家公司使用WebAssembly後引擎效率提高了300%。
WebAssembly作為一種新興的技術,為開發者提供了一種嶄新的思路和工作方式,未來是很有可能大放光彩的,不過目前其相關的資料和社區還不夠豐富,儘管已經有一些社區開始出現了相關技術文章,CSDN上也有較多的文章,但像本書這樣全面系統地介紹WebAssembly技術的還不多,甚至沒有。本書的兩位作者都是有10多年經驗的一線開發者,他們從WebAssembly概念誕生之初就開始密切關注該技術的發展,其中柴樹杉是Emscripten(WebAssembly的技術前身之一)的首批實踐者,丁爾男是國內首批工程化使用WebAssembly的開發者。
2018年7月,WebAssembly社區工作組發布了WebAssembly 1.0標準。現在,我在第一時間就向國內開發者介紹和推薦本書,是希望開發者能迅速地了解和學習新技術,探索新技術的價值。
——蔣濤 CSDN創始人、總裁,極客幫創始合伙人
目錄
- 第0章 WebAssembly誕生背景 1
- 0.1 JavaScript簡史 1
- 0.2 asm.js的嘗試 2
- 0.3 WebAssembly的救贖 5
第1章 JavaScript語言基礎 7
- 1.1 console對象 7
- 1.2 函式和閉包 9
- 1.3 Promise對象 12
- 1.4 二進制數組 13
第2章 WebAssembly快速入門 17
- 2.1 準備工作 17
- 2.2 首個例程 21
- 2.3 WebAssembly概覽 22
- 2.4 你好,WebAssembly 25
- 2.5 WebAssembly調試及代碼編輯環境 28
第3章 JavaScript中的WebAssembly對象 31
- 3.1 WebAssembly對象簡介 31
- 3.2 全局方法 32
- 3.3 WebAssembly.Module對象 36
- 3.4 WebAssembly.Instance對象 41
- 3.5 WebAssembly.Memory對象 44
- 3.6 WebAssembly.Table對象 50
- 3.7 小結及錯誤類型 61
第4章 WebAssembly彙編語言 65
- 4.1 S-表達式 65
- 4.2 數據類型 66
- 4.3 函式定義 67
- 4.4 變數 69
- 4.5 棧式虛擬機 72
- 4.6 函式調用 75
- 4.7 記憶體讀寫 79
- 4.8 控制流 83
- 4.9 導入和導出 91
- 4.10 start()函式及指令摺疊 96
第5章 WebAssembly二進制格式 99
- 5.1 LEB128編碼 99
- 5.2 頭部和段數據 101
- 5.3 記憶體段和數據段 104
- 5.4 表格段和元素段 106
- 5.5 開始段和函式索引 108
- 5.6 全局段 111
- 5.7 函式段、代碼段和類型段 113
- 5.8 導入段和導出段 118
- 5.9 自定義段 121
- 5.10 補充說明 126
第6章 Emscripten和WebAssembly 127
- 6.1 安裝環境 127
- 6.2 你好,Emscripten! 129
- 6.3 C/C++內聯JavaScript代碼 133
- 6.4 C/C++調用JavaScript函式 139
- 6.5 JavaScript調用C導出函式 149
- 6.6 運行時和訊息循環 155
- 6.7 補充說明 162
第7章 Go語言和WebAssembly 163
- 7.1 你好,Go語言 163
- 7.2 瀏覽器中的Go語言 166
- 7.3 使用JavaScript函式 168
- 7.4 回調Go函式 170
- 7.5 syscall/js包 172
- 7.6 WebAssembly模組的導入函式 175
- 7.7 WebAssembly虛擬機 178
- 7.8 補充說明 180
附錄 指令參考 181