【CSDN 编者按】Wasm 是否会取代 JavaScript ?这是 WebAssembly 发布之初不少人发出的疑问,本文作者在通过各项基准测试之后,回答了这个问题。

作者 | Loraine Lawson   责编 | 弯月

出品 | CSDN(ID:CSDNnews)

链接:https://thenewstack.io/javascript-vs-wasm-which-is-more-energy-efficient-and-faster/

JavaScript 还是 WebAssembly(简称 Wasm),究竟哪个运行速度更快、更节能?葡萄牙米尼奥大学对这个问题展开了研究,并得出了结论:虽然在实验室微基准测试方面,JavaScript 比 Wasm 更节能、更快,但在实际应用程序中,Wasm 在速度和节能方面皆优于 JavaScript,有时能高出 30%。

请不要忘记,如今 Wasm 还处于发展的早期阶段。

研究员兼软件工程师 João De Macedo 表示:“Wasm 仍处于起步阶段,只有时间能告诉我们它将如何发展。在我们看来,Wasm 完全有可能战胜原生应用,并帮助网络浏览器成为 21 世纪的操作系统。”

微基准测试与实际应用

该研究于 2022 年发表,不仅参考了微观基准,也考虑了实际情况。

João De Macedo解释道:“微基准测试是一种程序,用于跟踪和测量某个明确定义的任务的性能,例如持续时长、操作速率、带宽等。微基准测试是测量软件系统性能的主要方法之一,因此,Wasm 也不例外。”

由于 Wasm 的主要目标之一是提高 Web 应用程序的性能,因此比较 Wasm 和 JS 的运行时和节能的表现非常重要。

从微基准测试来看,在有些情况下,JavaScript 在速度和节能方面的表现都超过了 Wasm。然而,在 Google Chrome 和微软 Edge 上,Wasm 不仅比 JavaScript 更节能,而且性能也更好。但是,JavaScript 在 Mozilla Firefox 上确实比 Wasm 具有更好的性能,而且大多数时候的差异很明显。

尽管如此,最终 Wasm 仍将在实际的应用程序中占据主导地位。

报告称,“初步结果表明,WebAssembly 虽然仍处于起步阶段,但已开始超越 JavaScript,并且 WebAssembly 的成长空间也更大。统计分析表明,与 JavaScript 相比,WebAssembly 表现出了显著的性能差异。”

JavaScript 与 Wasm 研究的实际表现

该研究通过 Wasmboy 基准测试,测量了 Wasm 和 JavaScript 在实际应用程序中的表现。Wasmboy 基准测试是一个 Gameboy/Gameboy Color 模拟器,是用Typescript 编写的Wasm基准测试。Wasmboy 是用 JavaScript/TypeScript 编写的,创建的主要目标是比较 AssemblyScript 编译器生成的 Wasm 与 TypeScript 编译器生成的 ES6 最新版 JavaScript 之间的运行时性能。

报告称:“该游戏机包括六个开源游戏,可以从游戏机中运行。我们更新了 WasmBoy 的源代码,指定了执行游戏的浏览器。”

因此,总共有六款游戏在三种浏览器(Chrome、Edge 和 Firefox)上运行,使用两种语言,这样团队就有了 36 个独特的样本。

此外,他们还使用了 PSPDFKit 基准测试。该基准测试使用的软件支持在任何平台上查看、注释和填写 PDF文档中的表格。该报告指出,创建开源基准是为了评估将软件移植到 Wasm 生态系统的可能性,并比较 Wasm 与 JavaScript 的实现。该团队修改了应用程序的源代码,使用这两种语言(was 和 asm.js)执行多个输入。为了利用实际输入执行基准测试,该团队考虑了五个不同的 pdf 文档,其中包括将一本书分为三个部分、一篇科学论文和 20 张幻灯片。

报告称,“与 Wasmboy 基准测试类似,我们编写了一些 makefile,在不同浏览器中自动执行测试”,结果得到了在三种浏览器中运行的、用两种语言编写的五个示例程序,也就是说共有 30 个各不相同的程序。

此外,此次研究还考虑了各种微基准,这些程序最初是用 C 编写的,然后使用 Emscripten 编译器编译成了 Wasm 和 JavaScript。还有一些其他的语言也可编译为 Wasm,其中包括 C/C++、Rust、Go、Python 和 AssemblyScript(TypeScript 的一种形式)。

有关微基准测试和研究其他方面的详细信息,请参见 João De Macedo、Rui Abreu、Rui Pereira 和 João Saraiva 的论文《WebAssembly与JavaScript:能源和运行时性能》(https://ieeexplore.ieee.org/document/9830108)。

总的来说,他们可以通过这种方法检查JS 和 Wasm 如何以不同方式处理规模和输入大小。之前有研究使用了这种方法,但只检查了虚拟机的性能。De Macedo 的研究希望了解真实世界的应用程序,因此该团队开发了一个框架来测量基于浏览器的环境中的性能。

Wasm 是否会取代 JavaScript?

De Macedo 认为,“也许永远不会,因为 JS 更适合不需要超高性能的网页。目前,Wasm 只能作为 JS 的补充,而不能取而代之。但是,如果 Wasm 得到进一步发展,就有可能在某些应用程序中取代 JS,因为 Wasm 的加载时间更快,而且资源的使用效率更高。”

De Macedo 认为,从长远来看 Wasm 将带来颠覆性的改变。

他表示:“Wasm 不仅会彻底改变Web,而且还有可能颠覆技术市场的多个领域,包括云,尽管越来越多的组织采用了容器模式,但并未能真正满足每个人都需求。”

《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!

☞马斯克亲自下场测试 Twitter 功能,网友吐槽:他解雇了任何可以解释的工程师!
☞GitHub 超 14,000 Star,中国又一 Apache 顶级开源项目诞生!
☞开启收费模式,ChatGPT 试行 20 美元即享 Plus 体验,谷歌慌了!
【CSDN 编者按】Wasm 是否会取代 JavaScript ?这是 WebAssembly 发布之初不少人发出的疑问,本文作者在通过各项基准测试之后,回答了这个问题。作者 | Loraine Lawson 责编 | 弯月出品 | CSDN(ID:CSDNnews)链接:https://thenewstack.io/javascript-vs-wasm-which-is-more-energ... 轻量级 JavaScript WebAssembly 外部函数接口库 :backhand_index_pointing_right: :horizontal_traffic_light: w asm -ffi帮助转换整个JS中的类型 :left-right_arrow: WebAssembly 边界,包括: 一些Rust类型(选项,向量,字符串,枚举等) 以上的组合 大量基于和 ( cwrap / ccall )的思想和语法 许可证(MIT) WebAssembly 只支持数字类型( i32 , u32 , f32 , f64 ),因此它可以是笨拙的与工作。 如果要返回字符串怎么办? 或传递物体? 您不能直接这样做。 您必须改为将指针传递给内存。 每个 WebAssembly 实例都有一个内存对象支持。 您的模块将使用此缓冲区作为内存,但是您也可以从 JavaScript 中读取和操作它。 如果要将字符串传递给 WebAssembly ,则需要将该字符串写入内存,然后将指针传递给它。
对于node.js 节点顶部的实验性,最少的工具包和运行时,用于生成和运行模块。 要运行已编译的 WebAssembly 模块,您将需要或Node.js 8的浏览器的最新版本-但您可能已经知道这一点。 对于 开发 而言,向上使用node.js 6就足够了。 流行的 WebAssembly 工具从C / C ++角度提供 WebAssembly 的编译功能,重点是移植现有代码。 因此,它通常会产生很多不需要额外代码的代码,而这些代码只是试图补充 JavaScript 的模块。 另一方面,此程序包仅通过专门针对 WebAssembly (在浏览器中)来尝试使支持库和生成的模块尽可能小。 欢迎PR!
WebAssembly : Accessing C and C++ in Web Applications English | MP4 | AVC 1280×720 | AAC 48KHz 2ch | 1h 45m | 213 MB Accelerate web applications with native code using WebAssembly . WebAssembly is a new, revolutionary technology that allows developers to program webpages using popular high-level languages like C, C++, Rust, and Python. Code is then compiled to WebAssembly bytecode and implemented by the JavaScript engine built into all web browsers. You gain flexibility and functionality without sacrificing performance. This course focuses on the practical uses of the technology: converting C and C++ code to WebAssembly and executing WebAssembly in JavaScript . Programmer and engineer Matt Scarpino demonstrates the power of the WebAssembly , implementing quick sort and matrix multiplication algorithms. He also reviews advanced features, such as debugging and the WebAssembly text format. By the end of the course, you’ll understand the massive potential WebAssembly represents and be ready to implement it in your next web project. Topics include: Programming for WebAssembly with Enscripten Building projects with enmake Loading WebAssembly into JavaScript Calling JavaScript in WebAssembly Practical algorithms for WebAssembly apps Analyzing WebAssembly apps Table of Contents Introduction 1 Accelerate your web applications with WebAssembly 2 What you should know 3 Using the exercise files WebAssembly and Emscripten 4 Overview of WebAssembly 5 Installing Emscripten 6 Installation walk-through 7 Compilation and execution 8 Simple WebAssembly example 9 Building projects with emmake 10 Emscripten makefile example WebAssembly Development 11 Loading WebAssembly into JavaScript 12 Loading WebAssembly example 13 Calling JavaScript in WebAssembly 14 Calling JavaScript example 15 Memory objects 16 Memory object example Practical Algorithms in WebAssembly 17 Introduction to quicksort 18 Implementing quicksort in WebAssembly 19 Introduction to matrix operations 20 Managing matrice
WebAssembly SIMD 示例 本示例通过 WebAssembly 演示了 JavaScript 中 SIMD 的用法。 它运行了 2 个大小为 10000 的数组相加的 100000 倍(有关 多详细信息,请参阅 )。 第一个实现是通过 JavaScript 中的一个简单循环完成的: for ( let j = 0 ; j < arraySize ; j ++ ) { result [ j ] = a [ j ] + b [ j ] 第二个实现依赖于以手工编写的 WebAssembly 代码。 这是 SIMD 特定部分(您可以在找到整个代码): (v128.store ( i32 . add (local. get $result ) (local. get $i )) (i8x16.add (v128.load (local. get $i )
1. 好的性能: React的虚拟DOM可以显著提高性能,它只会 新需要 新的部分,而不是整个DOM。 2. 灵活:React并不是一个完整的框架,而是一个库,因此它可以很好地与其他库和框架一起使用。 3. 广泛的使用:由于React的流行程度,它拥有 多的社区支持和 多的资源。 1. 容易学习:Vue的文档非常清晰易懂,因此入门门槛相对较低。 2. 容易上手:Vue的模板语法 加直观,也 类似于传统的HTML和CSS。 3. 高的可维护性:Vue的模块化 开发 方式和单文件组件可以 好地组织代码,使得应用 容易维护。 总之,React和Vue都是非常优秀的 前端 框架,选择哪个框架最终取决于你的需求和个人偏好。如果你 注重性能和灵活性,那么React可能 适合你;如果你 注重易学易用和可维护性,那么Vue可能 适合你。