在本文中,我们将基于一个实际的客户端生产环境中遇到的问题,来观察如何使用 WebAssembly 技术打破原有的性能瓶颈,提升用户价值。在这个过程中,我们将引入 AssemblyScript 技术栈,把原有的 TypeScript/JavaScript 逻辑下沉 WebAssembly 中,从而实现性能的大幅提升,并通过实验验证具体的性能收益。
近年来,无论是 Serverless 还是 WebAssembly,都越来越受到开发者的广泛关注,作为字节跳动内部的函数计算平台,ByteFaaS 在 WebAssembly 方向上也有着不少的探索和实践。我们利用 WebAssembly 技术构建出了极致轻量化的函数运行时,并辅以全新设计的精简架构,打造出了云边一体的 Serverless 解决方案,拓展了 FaaS 的边界和应用场景,为业务带去了更多的可能。 本文将先带领大家认识 ByteFaaS 平台,分别介绍经典 FaaS 和 FaaS Worker(轻量级函数)方向。随后通过 WebAssembly 运行时、精简架构、开发者支持三个方面,详细介绍 FaaS Worker 的设计与实现。最后在文章结尾,会对 WebAssembly 函数能够为用户所带来的收益进行大致总结。
在 WebAssembly 社区蓬勃发展的当下,或出于对 JavaScript 等动态语言面对计算密集型任务时改善性能的愿望(如 Ammo.js),或源自将桌面表现出色的软件搬上 Web 环境的想法(如 AutoCAD),或希望在服务端利用沙箱来尽可能保证安全(如 Shopify-Serverless),越来越多的开发者选择 WebAssembly 技术。 而对于一项技术而言,围绕这项技术的开发工具矩阵是否完备,是否足够强大和易用,以及给开发者们带来的体验好坏,则是决定开发者们在尝试之后能否成为拥趸的关键因素。通常来说,一段代码的生命周期,包括编写、测试、交付与部署、上线生效、问题定位与修复等环节。在问题出现之后,对代码的源码调试(Source Code Debugging)往往是定位问题最高效的手段。提供高效的调试工具,帮助开发者迅速解决问题,是助推 WebAssembly 技术社区发展壮大的一个重要手段。 在本文中,我们将主要围绕 WebAssembly 的源码调试,阐述若干相关的问题。
课程的 WebAssembly 工作原理一章已经详细介绍了基于栈结构的指令执行原理和过程,然而,了解 WebAssembly 原理最有效的方式仍然是自己动手实现一个执行引擎;本文将从零开始实现一个简单的 WebAssembly 解释器 WAInterp (WebAssembly Interpreter),通过这一过程来进一步掌握和实践 WebAssembly 虚拟机技术。
狭义上的 WebAssembly 是 W3C 标准化组织制定的一个可移植、体积小、加载快并且兼容 Web 的全新二进制格式,在前面章节中已经对此做过详细的阐述;然而,随着 WebAssembly 技术的演进和广泛应用,它的内涵也在不断的外延,广义的 WebAssembly 可以理解为基于 WebAssembly 演化出来的完整生态
在本文中,我们将讨论驱动 WebAssembly 程序运行的核心组件——引擎。首先,本文将简要介绍一个语言的引擎包括哪些主要组成部分,它们如何配合完成工作,尝试构建一个概念模型。之后,就几款社区流行的开源引擎,分别介绍各自的特点。
WebAssembly (WASM) 的一个优势就是能够支持将不同语言编译成 WASM 代码,然后在不同的宿主环境中运行。这样就可以在不同的宿主环境中运行不同语言编写的 WASM 代码,比如在浏览器中运行 C/C++ 代码,或者在 Node.js 中运行 Rust 代码。那么,这些不同语言编写的 WASM 代码是如何运行在不同的宿主环境中的呢?在这一章中,我们将会重点介绍这些不同的语言和宿主环境中的 WASM 运行机制。
WebAssembly 作为一项新兴的技术,已经发展至 2.0 版本;相较于 1.0 版本,2.0 版本增加了更全面的指令支持和对大容量内存的友好性;同时,向量指令的加入也提高了 WebAssembly 在复杂场景下的性能表现。目前,WebAssembly 已经广泛应用于各种 Web 和非 Web 场景,例如 Web 端的视频渲染、编解码、算法移植,以及非 Web 端的 Serverless、客户端跨平台等领域。 除了广泛的应用场景,WebAssembly 还具有跨平台、高效、安全的优点。它可以在各种计算机架构上运行,并且具有接近原生代码的性能。此外,WebAssembly 的代码可以在沙箱中运行,不会影响主机环境的稳定性和安全性,从而有助于保护用户数据和隐私。 随着 WebAssembly 技术的不断进步,未来还有许多值得期待的方向。例如 WebAssembly 的多线程支持、AI 模型的推理和训练,以及在区块链领域的智能合约编写和执行。这些发展方向有助于进一步提高 WebAssembly 的性能和功能,从而推动 Web 上更多应用场景的发展。