计算机
类型
5.9
豆瓣评分
可以朗读
语音朗读
322千字
字数
2021-05-01
发行日期
展开全部
主编推荐语
抽丝剥茧,逐步解构WebAssembly的复杂生态。
内容简介
在人们极力渴求提高JavaScript性能的情况下,WebAssembly应运而生,现已得到所有主流Web浏览器的支持。由于其卓越的性能和可移植性,WebAssembly也被用于Web浏览器之外的许多场景。本书围绕WebAssembly技术栈介绍如何通过C、C++等语言编写高性能的浏览器端应用程序。
你将掌握WebAssembly的基础知识,学习如何创建原生WebAssembly模块,与JavaScript组件交互,使用WebAssembly文本格式进行调试,并利用多线程支持机制。
目录
- 版权信息
- 前言
- 致谢
- 关于本书
- 关于封面图片
- 第一部分 起步
- 第1章 初识WebAssembly
- 1.1 WebAssembly是什么
- 1.1.1 WebAssembly的先驱:asm.js
- 1.1.2 从asm.js到MVP
- 1.2 WebAssembly解决了哪些问题
- 1.2.1 性能改进
- 1.2.2 比JavaScript更快的启动速度
- 1.2.3 可以在浏览器中使用JavaScript之外的语言
- 1.2.4 代码复用的机会
- 1.3 WebAssembly的工作原理
- 1.3.1 编译器工作原理概览
- 1.3.2 模块的加载、编译和实例化
- 1.4 WebAssembly模块的结构
- 1.4.1 前导
- 1.4.2 已知段
- 1.4.3 自定义段
- 1.5 WebAssembly文本格式
- 1.6 WebAssembly如何获得安全性
- 1.7 哪些语言可用来创建WebAssembly模块
- 1.8 我的模块可以用在何处
- 1.9 小结
- 第2章 初探WebAssembly模块内部
- 2.1 已知段
- 2.2 自定义段
- 2.3 小结
- 第3章 创建自己的第一个WebAssembly模块
- 3.1 Emscripten工具包
- 3.2 WebAssembly模块
- 何时不应使用WebAssembly模块
- 3.3 Emscripten输出选项
- 3.4 用Emscripten编译C/C++并使用HTML模板
- 3.5 让Emscripten生成JavaScript plumbing代码
- 3.5.1 用Emscripten生成的JavaScript编译C/C++
- 3.5.2 创建一个供浏览器使用的基本HTML网页
- 3.6 让Emscripten只生成WebAssembly文件
- 3.6.1 用Emscripten将C/C++编译为副模块
- 3.6.2 浏览器中的加载与实例化
- 3.7 功能检测:如何测试WebAssembly是否可用
- 3.8 现实用例
- 3.9 练习
- 3.10 小结
- 第二部分 使用模块
- 第4章 复用现有C++代码库
- 4.1 用C/C++创建带Emscripten plumbing的模块
- 4.1.1 修改C++代码
- 4.1.2 将代码编译为WebAssembly模块
- 4.1.3 创建网页
- 4.1.4 创建与模块交互的JavaScript代码
- 4.1.5 查看结果
- 4.2 用C/C++创建不使用Emscripten的模块
- 4.2.1 修改C++代码
- 4.2.2 将代码编译为WebAssembly模块
- 4.2.3 创建与模块交互的JavaScript代码
- 4.2.4 查看结果
- 4.3 现实用例
- 4.4 练习
- 4.5 小结
- 第5章 创建调用JavaScript的WebAssembly模块
- 5.1 用C/C++创建带Emscripten plumbing的模块
- 5.1.1 调整C++代码
- 5.1.2 创建将要包含到Emscripten生成的JavaScript文件中的JavaScript代码
- 5.1.3 将代码编译为WebAssembly模块
- 5.1.4 调整网页的JavaScript代码
- 5.1.5 查看结果
- 5.2 用C/C++创建不带Emscripten plumbing的模块
- 5.2.1 C++修改
- 5.2.2 将代码编译为WebAssembly模块
- 5.2.3 调整将与模块交互的JavaScript代码
- 5.2.4 查看结果
- 5.3 现实用例
- 5.4 练习
- 5.5 小结
- 第6章 创建通过函数指针与JavaScript交流的WebAssembly模块
- 6.1 用C/C++创建带Emscripten plumbing的模块
- 6.1.1 使用JavaScript传给模块的函数指针
- 6.1.2 调整C++代码
- 6.1.3 将代码编译为WebAssembly模块
- 6.1.4 调整网页JavaScript代码
- 6.1.5 查看结果
- 6.2 用C/C++创建不带Emscripten plumbing的模块
- 6.2.1 使用JavaScript传给模块的函数指针
- 6.2.2 修改C++代码
- 6.2.3 将代码编译为WebAssembly模块
- 6.2.4 调整与模块交互的JavaScript
- 6.2.5 查看结果
- 6.3 现实用例
- 6.4 练习
- 6.5 小结
- 第三部分 高级主题
- 第7章 动态链接:基础
- 7.1 动态链接:优点与缺点
- 7.2 动态链接选项
- 7.2.1 副模块与主模块
- 7.2.2 动态链接:dlopen
- 7.2.3 动态链接:dynamicLibraries
- 7.2.4 动态链接:WebAssembly JavaScript API
- 7.3 动态链接回顾
- 7.4 现实用例
- 7.5 练习
- 7.6 小结
- 第8章 动态链接:实现
- 8.1 创建WebAssembly模块
- 8.1.1 将文件validate.cpp中的逻辑分割为两个文件
- 8.1.2 为Place Order表逻辑创建新的C++文件
- 8.1.3 用Emscripten生成WebAssembly副模块
- 8.1.4 定义一个JavaScript函数来处理验证问题
- 8.1.5 用Emscripten生成WebAssembly主模块
- 8.2 调整网页
- 8.2.1 调整网页的JavaScript代码
- 8.2.2 查看结果
- 8.3 现实用例
- 8.4 练习
- 8.5 小结
- 第9章 线程:Web worker与pthread
- 9.1 Web worker的好处
- 9.2 使用Web worker的考量
- 9.3 用Web worker预取WebAssembly模块
- 9.3.1 调整calculate_primes逻辑
- 9.3.2 用Emscripten生成WebAssembly文件
- 9.3.3 复制文件到正确位置
- 9.3.4 为网页创建HTML文件
- 9.3.5 为网页创建JavaScript文件
- 9.3.6 创建Web worker的JavaScript文件
- 9.3.7 查看结果
- 9.4 使用pthread
- 9.4.1 调整calculate_primes逻辑以创建并使用4个pthread线程
- 9.4.2 用Emscripten生成WebAssembly文件
- 9.4.3 查看结果
- 9.5 现实用例
- 9.6 练习
- 9.7 小结
- 第10章 Node.js中的WebAssembly模块
- 10.1 回顾前面所学内容
- 10.2 服务器端验证
- 10.3 使用Emscripten创建模块
- 10.3.1 加载WebAssembly模块
- 10.3.2 调用WebAssembly模块内函数
- 10.3.3 调入JavaScript代码
- 10.3.4 调用JavaScript函数指针
- 10.4 使用WebAssembly JavaScript API
- 10.4.1 加载并实例化WebAssembly模块
- 10.4.2 调用WebAssembly模块内函数
- 10.4.3 WebAssembly模块调入JavaScript代码
- 10.4.4 WebAssembly模块调用JavaScript函数指针
- 10.5 现实用例
- 10.6 练习
- 10.7 小结
- 第四部分 调试与测试
- 第11章 WebAssembly文本格式
- 11.1 用WebAssembly文本格式创建游戏的核心逻辑
- 11.1.1 模块段
- 11.1.2 注释
- 11.1.3 函数签名
- 11.1.4 module节点
- 11.1.5 import节点
- 11.1.6 global节点
- 11.1.7 export节点
- 11.1.8 start节点
- 11.1.9 code节点
- 11.1.10 type节点
- 11.1.11 data节点
- 11.2 从文本格式生成WebAssembly模块
- 11.3 Emscripten生成模块
- 11.3.1 创建C++文件
- 11.3.2 生成WebAssembly模块
- 11.4 创建HTML和JavaScript文件
- 11.4.1 修改HTML文件
- 11.4.2 创建JavaScript文件
- 11.5 查看结果
- 11.6 现实用例
- 11.7 练习
- 11.8 小结
- 第12章 调试
- 12.1 扩展游戏
- 12.2 调整HTML代码
- 12.3 显示试验次数
- 12.3.1 JavaScript函数generateCards
- 12.3.2 调整文本格式
- 12.3.3 生成Wasm文件
- 12.3.4 测试修改
- 12.4 增加试验次数
- 12.4.1 JavaScript函数updateTriesTotal
- 12.4.2 调整文本格式
- 12.4.3 生成Wasm文件
- 12.4.4 测试修改
- 12.5 更新总结屏幕
- 12.5.1 JavaScript函数levelComplete
- 12.5.2 调整文本格式
- 12.5.3 生成Wasm文件
- 12.5.4 测试修改
- 12.6 练习
- 12.7 小结
- 第13章 测试——然后呢
- 13.1 安装JavaScript测试框架
- 13.1.1 文件package.json
- 13.1.2 安装Mocha和Chai
- 13.2 创建并运行测试
- 13.2.1 编写测试
- 13.2.2 从命令行运行测试
- 13.2.3 加载测试的HTML页面
- 13.2.4 从浏览器运行测试
- 13.2.5 让测试通过
- 13.3 下一步是什么
- 13.4 练习
- 13.5 小结
- 附录A 安装与工具设置
- A.1 Python
- A.1.1 运行本地Web服务器
- A.1.2 WebAssembly媒体类型
- A.2 Emscripten
- A.2.1 下载Emscripten SDK
- A.2.2 如果使用Windows
- A.2.3 如果使用Mac或Linux
- A.2.4 绕过安装问题
- A.3 Node.js
- A.4 WebAssembly二进制工具包
- A.5 Bootstrap
- 附录B ccall、cwrap以及直接函数调用
- B.1 ccall
- B.1.1 创建一个简单的WebAssembly模块
- B.1.2 创建与WebAssembly模块交流的网页
- B.2 cwrap
- 调整JavaScript代码以使用cwrap
- B.3 直接函数调用
- B.4 向模块传递数组
- 附录C Emscripten宏
- C.1 宏emscripten_run_script
- C.2 宏EM_JS
- C.2.1 没有参数值
- C.2.2 传递参数值
- C.2.3 传递指针作为参数
- C.2.4 返回字符串指针
- C.3 宏EM_ASM
- C.3.1 EM_ASM
- C.3.2 EM_ASM_
- C.3.3 传递指针作为参数
- C.3.4 EM_ASM_INT与EM_ASM_DOUBLE
- C.3.5 返回一个字符串指针
- 附录D 练习答案
- D.1 第3章
- D.1.1 练习1
- D.1.2 练习2
- D.2 第4章
- D.2.1 练习1
- D.2.2 练习2
- D.3 第5章
- D.3.1 练习1
- D.3.2 练习2
- D.4 第6章
- D.4.1 练习1
- D.4.2 练习2
- D.5 第7章
- D.5.1 练习1
- D.5.2 练习2
- D.6 第8章
- D.6.1 练习1
- D.6.2 练习2
- D.7 第9章
- D.7.1 练习1
- D.7.2 练习2
- D.8 第10章
- D.8.1 练习1
- D.8.2 练习2
- D.8.3 练习3
- D.9 第11章
- D.9.1 练习1
- D.9.2 练习2
- D.10 第12章
- D.10.1 练习1
- D.10.2 练习2
- D.11 第13章
- D.11.1 练习1
- D.11.2 练习2
- 附录E 文本格式进阶
- E.1 控制流语句
- E.1.1 If语句
- E.1.2 循环
- E.2 函数指针
- 代码测试
- 作者简介
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。