Share E-Book
Scan to open this page

Scan with your phone to open this page

Author作者: [加拿大] C.杰勒德·加伦特(C. Gerard Gallant) 译者: 单业

特别说明 ●抽丝剥茧,逐步解构WebAssembly的复杂生态 ●突破JavaScript瓶颈,让C/C++代码快速运行于浏览器端 ●边学边练,配套练习答案帮你熟练掌握WebAssembly 简介 在人们极力渴求提高JavaScript性能的情况下,WebAssembly应运而生,现已得到所有主流Web浏览器的支持。由于其卓越的性能和可移植性,WebAssembly也被用于Web浏览器之外的许多场景。本书围绕WebAssembly技术栈介绍如何通过C、C++等语言编写高性能的浏览器端应用程序。你将掌握WebAssembly的基础知识,学习如何创建原生WebAssembly模块,与JavaScript组件交互,使用WebAssembly文本格式进行调试,并利用多线程支持机制。 本书特色 WebAssembly是可移植、体积小、加载快并且兼容Web浏览器的全新类汇编语言格式,其具有高效、安全、开放、标准等特性。使用WebAssembly,你能够不再依赖JavaScript编写基于浏览器的高性能应用程序。通过编译为WebAssembly二进制格式,你的C/C++代码或Rust代码都可以在浏览器中以接近原生的速度运行。 本书介绍如何使用C/C++语言和Emscripten工具包编写并运行高性能的Web应用程序。你将学习如何创建原生WebAssembly模块、如何与JavaScript组件交互,以及如何使用Web worker和pthread最大限度地提高性能。 ●多个模块在运行时的动态链接 ●模块与JavaScript之间的通信 ●利用WebAssembly文本格式进行调试 ●利用Web worker和pthread进行多线程编程 作译者介绍 C.杰勒德•加伦特(C. Gerard Gallant),微软认证专家,Dovico公司高级软件工程师,DZone技术网站专栏作者。 【译者简介】 单业,计算机专业硕士,软件工程师,现居于上海,另译有《你不知道的JavaScript》(中卷和下卷)。

AI Reading Assistant

Whole-book reading guide from stratified index samples; jump to passages in the text

Brief outline
【One-Line Pitch】 特别说明 ●抽丝剥茧,逐步解构WebAssembly的复杂生态 ●突破JavaScript瓶颈,让C/C++代码快速运行于浏览器端 ●边学边练,配套练习答案帮你熟练掌握WebAssembly 简介 在人们极力渴求提高Ja… 【Book Arc】 - **Opening (~0%–12%)**: 书名: WebAssembly实战 ( etc.)(Z-Library) 作者: 作者: [加拿大] C.杰勒德·加伦特(C.; 机器语言(1和0,或者本地代码)时,你通常会编写更接近于人 类语言的某种东西。尽管使用从计算机细节中抽象出来的代码更容 易,但计算机处理器并不理解你的代码,因此运行时需要将你编写的 内容转换为机器码。 - **Early (~12%–35%)**: 如图4-9所示,本节的流程与4.1节中的类似,但这里只用Emscripten 生成WebAssembly文件,不生成JavaScript plumbing文件。; ger.library对象中。为了实现这一点,可以使用 Emscripten的mergeInto函数,它接受两个参数: 想要添加属性的对象,这个示例中是ibraryManager.library 对象; - **Middle (~35%–65%)**: emcc find_primes.c -s SIDE_MODULE 2 -O1 -o find_primes.wasm 创建好两个WebAssembly模块之后,接下来的步骤是创建网页和 JavaScript文件来加载、链接模块,并与之交互(参见图7-19)。; JavaScript代码会使用Emscripten辅助函数ccall、stringToUTF8 和UTF8ToString,因此需要在生成的JavaScript文件中包含它们。 - **Late (~65%–88%)**: 函数 GetCardValue 函数 GetCardValue接受两个i32参数( row和 column)并 返回一个i32值。可以调用这个函数来取得指定行列位置的卡牌 值。; moduleExports._PlayNextLevel(); - **Ending (~88%–100%)**: 答案 addFunction和removeFunction。; 在函数 InitializeCards顶端、局部变量 count声明之后,将值 i32.const 1051放置在栈上。这是内存中的data节点的起始地址 (1024)加上到达字符串InitializeCards的第一个字符的字符数 (\0是一个字符)。 【Key Takeaways】 - **书名: WebAssembly实战 ( et…** (Opening): 书名: WebAssembly实战 ( etc.)(Z-Library) 作者: 作者: [加拿大] C.杰勒德·加伦特(C. - **机器语言(1和0** (Opening): 机器语言(1和0,或者本地代码)时,你通常会编写更接近于人 类语言的某种东西。尽管使用从计算机细节中抽象出来的代码更容 易,但计算机处理器并不理解你的代码,因此运行时需要将你编写的 内容转换为机器码。 - **Memory Memory段持有模块实例使用…** (Opening): Memory Memory段持有模块实例使用的线性内存。 - **如图4-9所示,本节的流程与4.1节中的类似…** (Early): 如图4-9所示,本节的流程与4.1节中的类似,但这里只用Emscripten 生成WebAssembly文件,不生成JavaScript plumbing文件。 - **ger.library对象中。为了实现这一点** (Early): ger.library对象中。为了实现这一点,可以使用 Emscripten的mergeInto函数,它接受两个参数: 想要添加属性的对象,这个示例中是ibraryManager.library 对象; - **Pointers(resolve** (Early): Pointers(resolve, reject, pointers); 【Reading Tips】 - Use Passage locations below to jump into the text and set reading anchors - If this is a brief outline, click Regenerate (top right) for a synthesized guide 【Coverage Limits】 Compressed outline without the model (~22 index chunks). Full structured guide needs AI available.
Page 18
机器语言(1和0,或者本地代码)时,你通常会编写更接近于人 类语言的某种东西。尽管使用从计算机细节中抽象出来的代码更容 易,但计算机处理器并不理解你的代码,因此运行时需要将你编写的 内容转换为机器码。 JavaScript是一种解释型编程语言,也就是说,它会在执行时读入你 编写的代码,并将这些指令即时翻译为机器码...
View in text
Excerpt 2
产环境中的代码会采用4.1节介绍的流程,其中 Emscripten在生成的模块中包含你的代码使用的C标准库函数。在那种 流程中,Emscripten还会生成JavaScript plumbing文件来处理模块的 加载和实例化,并包含ccall这样的辅助函数来简化与模块的交互过 程。 如图4-9所示,本节的流程与4...
View in text
Excerpt 3
ble段的大小,因为那就是要插入 JavaScript函数的位置的索引值。可以使用WebAssembly.Table对 象的grow方法将Table段的大小增加指定的元素个数。这里只需要增 加一个函数,因此告诉Table增长1。 第三部分 高级主题 至此你已经了解了创建并使用WebAssembly模块的基础内容,...
View in text
Excerpt 4
oduct', ←--- - 调用模块中的函数ValidateProduct 'number', ['string', 'number', 'number'], [productId, arrayPointer, arrayLength]); orderModule._free(arrayPointer); ←-...
View in text
Excerpt 5
在先跳过type节点,写好模块函数后再回来添加这些节 点。 向module节点添加的第一个段是import节点。 11.1.5 import节点 Import已知段(参见图11-8)声明要导入模块的所有条目,其中可以 包括Function、Table、Memory或Global导入。对于正在创建的这个模 块来说,...
View in text
Excerpt 6
ateTriesTotal 属性。 图12-20 Firefox中的Scopes一节展示了这个函数作用域中的全局变 量 信息 在Chrome开发者工具中,Scopes面板不会显示全局变量的 值。如果展开Scopes面板的local条目,那么会有一个stack条 目,其中显示了当前栈上的值。而Firefox不会展示...
View in text
Excerpt 7
en的支撑数组中添加和移除函数指针? 答案 addFunction和removeFunction。 D.4.2 练习2 WebAssembly使用哪个指令来调用定义在Table段中的函数? 答案 call_indirect。 D.5 第7章 第7章有两个练习。 D.5.1 练习1 使用本章中学到的动态链接方法之一...
View in text
Excerpt 8
t这一行代码之前的右括号。在(br $while)语句之后为if语 句放一个右括号。 作者简介 C.杰勒德•加伦特(C. Gerard Gallant),微软认证专家,Dovico公 司高级软件工程师,DZone技术网站专栏作者。 看完了 如果您对本书内容有疑问,可发邮件至contact@turingbook.c...
View in text
Tags
AI categories
JavaScript
ISBN: 7115561451
Publish Year: 2021
Language: Chinese
Pages: 500
File Format: PDF
File Size: 9.8 MB
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

Generating text preview…