求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

WebAssembly實戰檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

WebAssembly實戰》,C.傑勒德·加倫特(C.,Gerard,Gallant) 著,單業 譯,出版社: 人民郵電出版社。

人民郵電出版社是全國優秀出版社、全國百佳圖書出版單位。人民郵電出版社出版領域涵蓋科技出版、教育出版、大眾出版,涉及信息技術、通信、工業技術、科普[1]、經濟管理、攝影、藝術、運動與休閒、心理學、少兒、大中專教材等10餘個出版門類,年出版圖書[2]近萬種。

內容簡介

在人們極力渴求提高JavaScript性能的情況下,WebAssembly應運而生,現已得到所有主流Web瀏覽器的支持。由於其卓越的性能和可移植性,WebAssembly也被用於Web瀏覽器之外的許多場景。本書圍繞WebAssembly技術棧介紹如何通過C、C++等語言編寫高性能的瀏覽器端應用程序。你將掌握WebAssembly的基礎知識,學習如何創建原生WebAssembly模塊,與JavaScript組件交互,使用WebAssembly文本格式進行調試,並利用多線程支持機制。

目錄

第 一部分 起步

第 1 章 初識WebAssembly 2

1.1 WebAssembly是什麼 2

1.1.1 WebAssembly的先驅:asm.js 3

1.1.2 從asm.js到MVP 3

1.2 WebAssembly解決了哪些問題 4

1.2.1 性能改進 4

1.2.2 比JavaScript更快的啟動速度 5

1.2.3 可以在瀏覽器中使用JavaScript之外的語言 5

1.2.4 代碼復用的機會 5

1.3 WebAssembly的工作原理 6

1.3.1 編譯器工作原理概覽 6

1.3.2 模塊的加載、編譯和實例化 8

1.4 WebAssembly 模塊的結構 9

1.4.1 前導 10

1.4.2 已知段 10

1.4.3 自定義段 10

1.5 WebAssembly文本格式 10

1.6 WebAssembly如何獲得安全性 11

1.7 哪些語言可用來創建WebAssembly模塊 11

1.8 我的模塊可以用在何處 12

1.9 小結 13

第 2 章 初探WebAssembly模塊內部 14

2.1 已知段 15

2.2 自定義段 18

2.3 小結 19

第 3 章 創建自己的第 一個WebAssembly模塊 20

3.1 Emscripten工具包 20

3.2 WebAssembly模塊 21

3.3 Emscripten輸出選項 23

3.4 用Emscripten編譯C/C++並使用HTML模板 24

3.5 讓Emscripten生成JavaScript plumbing代碼 29

3.5.1 用Emscripten生成的JavaScript編譯C/C++ 30

3.5.2 創建一個供瀏覽器使用的基本HTML網頁 32

3.6 讓Emscripten只生成WebAssembly文件 35

3.6.1 用Emscripten將C/C++編譯為副模塊 36

3.6.2 瀏覽器中的加載與實例化 38

3.7 功能檢測:如何測試WebAssembly是否可用 44

3.8 現實用例 45

3.9 練習 46

3.10 小結 46

第二部分 使用模塊

第 4 章 復用現有C++代碼庫 48

4.1 用C/C++創建帶Emscripten plumbing的模塊 50

4.1.1 修改C++代碼 50

4.1.2 將代碼編譯為WebAssembly模塊 55

4.1.3 創建網頁 56

4.1.4 創建與模塊交互的JavaScript代碼 57

4.1.5 查看結果 62

4.2 用C/C++創建不使用Emscripten的模塊 63

4.2.1 修改C++代碼 64

4.2.2 將代碼編譯為WebAssembly模塊 69

4.2.3 創建與模塊交互的JavaScript代碼 69

4.2.4 查看結果 74

4.3 現實用例 74

4.4 練習 74

4.5 小結 75

第 5 章 創建調用JavaScript的WebAssembly模塊 76

5.1 用C/C++創建帶Emscripten plumbing的模塊 78

5.1.1 調整C++代碼 79

5.1.2 創建將要包含到Emscripten生成的JavaScript文件中的JavaScript代碼 81

5.1.3 將代碼編譯為WebAssembly模塊 82

5.1.4 調整網頁的JavaScript代碼 83

5.1.5 查看結果 86

5.2 用C/C++創建不帶Emscripten plumbing的模塊 86

5.2.1 C++修改 88

5.2.2 將代碼編譯為WebAssembly模塊 89

5.2.3 調整將與模塊交互的JavaScript代碼 90

5.2.4 查看結果 92

5.3 現實用例 93

5.4 練習 93

5.5 小結 93

第 6 章 創建通過函數指針與JavaScript交流的WebAssembly模塊 95

6.1 用C/C++創建帶Emscripten plumbing的模塊 96

6.1.1 使用JavaScript傳給模塊的函數指針 96

6.1.2 調整C++代碼 97

6.1.3 將代碼編譯為WebAssembly模塊 101

6.1.4 調整網頁JavaScript代碼 102

6.1.5 查看結果 107

6.2 用C/C++創建不帶Emscriptenplumbing的模塊 108

6.2.1 使用JavaScript傳給模塊的函數指針 109

6.2.2 修改C++代碼 109

6.2.3 將代碼編譯為WebAssembly模塊 110

6.2.4 調整與模塊交互的JavaScript 111

6.2.5 查看結果 119

6.3 現實用例 119

6.4 練習 120

6.5 小結 120

第三部分 高級主題

第 7 章 動態鏈接:基礎 122

7.1 動態鏈接:優點與缺點 123

7.2 動態鏈接選項 123

7.2.1 副模塊與主模塊 124

7.2.2 動態鏈接:dlopen 125

7.2.3 動態鏈接:dynamicLibraries 133

7.2.4 動態鏈接:WebAssembly JavaScript API 137

7.3 動態鏈接回顧 143

7.4 現實用例 144

7.5 練習 144

7.6 小結 144

第 8 章 動態鏈接:實現 145

8.1 創建WebAssembly模塊 147

8.1.1 將文件validate.cpp中的邏輯分割為兩個文件 149

8.1.2 為Place Order表邏輯創建新的C++文件 151

8.1.3 用Emscripten生成WebAssembly副模塊 154

8.1.4 定義一個JavaScript函數來處理驗證問題 158

8.1.5 用Emscripten生成WebAssembly主模塊 158

8.2 調整網頁 160

8.2.1 調整網頁的JavaScript代碼 163

8.2.2 查看結果 171

8.3 現實用例 172

8.4 練習 172

8.5 小結 173

第9 章 線程:Web worker與pthread 174

9.1 Web worker的好處 175

9.2 使用Web worker的考量 176

9.3 用Web worker預取WebAssembly模塊 176

9.3.1 調整calculate_primes邏輯 178

9.3.2 用Emscripten生成WebAssembly文件 180

9.3.3 複製文件到正確位置 180

9.3.4 為網頁創建HTML 文件 181

9.3.5 為網頁創建JavaScript文件 182

9.3.6 創建Web worker的JavaScript文件 184

9.3.7 查看結果 185

9.4 使用pthread 186

9.4.1 調整calculate_primes邏輯以創建並使用4個pthread線程 187

9.4.2 用Emscripten生成WebAssembly文件 190

9.4.3 查看結果 191

9.5 現實用例 193

9.6 練習 194

9.7 小結 194

第 10 章 Node.js中的WebAssembly模塊 195

10.1 回顧前面所學內容 196

10.2 服務器端驗證 196

10.3 使用Emscripten創建模塊 197

10.3.1 加載WebAssembly模塊 198

10.3.2 調用WebAssembly模塊內函數 199

10.3.3 調入JavaScript代碼 202

10.3.4 調用JavaScript函數指針 204

10.4 使用WebAssembly JavaScript API 206

10.4.1 加載並實例化WebAssembly模塊 207

10.4.2 調用WebAssembly模塊內函數 208

10.4.3 WebAssembly模塊調入JavaScript代碼 212

10.4.4 WebAssembly模塊調用JavaScript函數指針 215

10.5 現實用例 218

10.6 練習 219

10.7 小結 219

第四部分 調試與測試

第 11 章 WebAssembly文本格式 222

11.1 用WebAssembly文本格式創建遊戲的核心邏輯 225

11.1.1 模塊段 225

11.1.2 注釋 227

11.1.3 函數簽名 227

11.1.4 module節點 228

11.1.5 import節點 229

11.1.6 global節點 232

11.1.7 export節點 233

11.1.8 start節點 234

11.1.9 code節點 235

11.1.10 type節點 252

11.1.11 data節點 254

11.2 從文本格式生成WebAssembly模塊 255

11.3 Emscripten生成模塊 256

11.3.1 創建C++文件 256

11.3.2 生成WebAssembly模塊 257

11.4 創建HTML和JavaScript文件 258

11.4.1 修改HTML文件 258

11.4.2 創建JavaScript文件 260

11.5 查看結果 265

11.6 現實用例 265

11.7 練習 265

11.8 小結 266

第 12 章 調試 267

12.1 擴展遊戲 268

12.2 調整HTML代碼 269

12.3 顯示試驗次數 270

12.3.1 JavaScript函數generateCards 271

12.3.2 調整文本格式 272

12.3.3 生成Wasm文件 272

12.3.4 測試修改 274

12.4 增加試驗次數 275

12.4.1 JavaScript函數updateTriesTotal 276

12.4.2 調整文本格式 277

12.4.3 生成Wasm文件 278

12.4.4 測試修改 279

12.5 更新總結屏幕 286

12.5.1 JavaScript函數levelComplete 287

12.5.2 調整文本格式 288

12.5.3 生成Wasm文件 289

12.5.4 測試修改 290

12.6 練習 290

12.7 小結 291

第 13 章 測試——然後呢 292

13.1 安裝JavaScript測試框架 293

13.1.1 文件package.json 294

13.1.2 安裝Mocha和Chai 295

13.2 創建並運行測試 295

13.2.1 編寫測試 296

13.2.2 從命令行運行測試 299

13.2.3 加載測試的HTML頁面 300

13.2.4 從瀏覽器運行測試 302

13.2.5 讓測試通過 303

13.3 下一步是什麼 304

13.4 練習 304

13.5 小結 304

附錄A 安裝與工具設置 306

附錄B ccall、cwrap以及直接函數調用 314

附錄C Emscripten宏 320

附錄D 練習答案 335

附錄E 文本格式進階 354

參考文獻

  1. 100部科普經典名著,豆瓣,2018-04-26
  2. 圖書的演變歷史資料,學習啦,2017-06-07