再见 JavaScript, 你好 WebAssembly

简介: Web 开发一直是 JavaScript 开发的代名词。直到现在一种新的 Web 开发形式开始出现,它有望提供 JavaScript 的替代方案。作为一名拥有 15 年 Web 开发经验的软件开发人员,这一新方向引起了我的兴趣。

原文作者:Ed Charbeneau

译者:UC 国际研发 国勇


image.png

一种新的 Web 开发形式开始出现,它有望提供 JavaScript 的替代方案:WebAssembly。

Web 开发一直是 JavaScript 开发的代名词。直到现在一种新的 Web 开发形式开始出现,它有望提供 JavaScript 的替代方案。作为一名拥有 15 年 Web 开发经验的软件开发人员,这一新方向引起了我的兴趣。

WebAssembly(Wasm)是针对 Web 浏览器的二进制指令格式,旨在为类似 C# 这一类的高级语言提供编译。最近微软开始尝试使用 WebAssembly,通过 Mono 运行时将 .NET 引入浏览器。 Mono 提供了在 WebAssembly 上运行的 .NET 库(.dll)的管道。运行在 Mono 之上的是 Blazor,一个基于 .NET 的单页 Web 应用程序框架,在浏览器中运行 Mono 的 WebAssembly 运行时。 WebAssembly-Mono-Blazor 栈有潜力允许 web 开发者使用整个 .net 应用平台,而且不需要 Javascript 和浏览器插件。

当然引入这个新概念会马上带来问题。

WebAssembly 提供了哪些 JavaScript 或 TypeScript 没有提供的?
我的答案伴随着大量的偏见和意见,我觉得应该并非所有的开发人员、项目和工具都是一样的。对我来说答案很明确,简短的回答是“选择”。开放的 Web 开发超出 javascript 意味着自由的去选择不仅是 JavaScript 或 .NET,而是更广泛的选择。更确切地说就我个人而言,我可以选择使用我已在其他地方使用的工具和语言来开发Web应用程序。

npm 和 WebPack
开放的好处之一是 web 到 .NET 中我们有可以替换 npm 和 WebPack 的产品。作为很长一段时间的 .NET 开发人员,我很激动的欢迎 NuGet(包管理器)和 MSBuild。对我来说这些技术问题更少、更熟悉、而且效率更高。虽然没有什么是完美的,但我与 NuGet 和 MSBuild 的关系大多是积极的。

image.png

起初,这可能会给人的印象是 npm 和 Webpack 有点不好,而且我主张放弃这些工具,但事实恰恰相反。 npm 和 WebPack 是很棒的工具,它们可能会存在很长一段时间。如果你的 JavaScript 工具适合你和你创建的应用程序,那这是一件很棒的事情。拥有悠久的 web 开发经验,我了解为什么 npm 和 WebPack 存在,并欣赏他们拥有和将要完成的事情。

减少学习曲线
让我感到感到震惊的一件事是 Blazor 的使用感觉非常简单。为了保持没有偏见,我承认它的功能不够完整,还没有大规模测试。 Blazor 将 Razor(UI)的易用性与其他 .NET Core 的概念结合在一起,例如:依赖注入,配置和路由。它借用了流行的 JavaScript 框架(如Angular和React)中的最佳模式,同时利用了 Razor 模板,并提供了与其他 .NET 的同等约定。这些功能组合允许以前所未有的方式重用技能。就如同 Node 程序员在全栈 javascript 应用中使用同一个语言和熟悉的概念。

你仍然还需要 JavaScript
使用 WebAssembly 并不意味着可以避免使用 JavaScript。 WebAssembly 当前必须由 JavaScript 加载和编译。(是的,我听到的记录。)虽然将来计划允许像 ES6 模块一样加载 WebAssembly 模块,但 JavaScript 可以引导WebAssembly。 JavaScript 的必要性也不止于此。 WebAssembly 无权访问任何平台 API。为了访问平台 API,需要用到 JavaScript。

Blazor Interop
WebAssembly 应用程序可以调用 JavaScript,为纯 WebAssembly 无法访问的 API 提供迁移路径。此功能也用于 Blazor 框架。由于 Blazor 是新的和实验性的框架,Blazor Interop 允许开发人员在 WebAssembly 本身存在缺陷时或者因为 Blazor 框架尚未成熟时回到 JavaScript。此外 interop 是许多开发人员将在 C#中使用的抽象层,他们不必担心底层技术仍在执行 JavaScript 代码。随着 WebAssembly 的成熟和随着时间的推移对抽象的需求将会减少。

image.png

再见不是永远的

Progress 通过 Angular,React,Vue 和 jQuery 对 JavaScript 进行了大量投资。 Progress 旗下最令人兴奋的开源框架之一是 NativeScript。 NativeScript 是一个使用 JavaScript 为 iOS 和 Android 创建本机移动应用程序的框架。 NativeScript 以其为开发人员创建选择的方式让我想起了 WebAssembly。 借助 NativeScript,JavaScript 开发人员可以重用其现有技能进入移动开发领域,从而使其在团队中更具价值。 NativeScript 的目标是赋予开发人员权力,而不是降低 Swift,Objective-C 或 Java 的价值。

我觉得WebAssembly也有类似的目标。 实际上,该目标在官方WebAssembly文档中说明。

WebAssembly 是否试图取代JavaScript?

没有! WebAssembly 旨在作为 JavaScript 的补充而非替代。 随着时间的推移,WebAssembly 将允许将许多语言编译到 Web 上,而 JavaScript 具有令人难以置信的动力,并且仍将是 Web 的单一特权地位的(如上所述)动态语言。 此外,预计 JavaScript 和 WebAssembly 将在许多配置中一起使用......

向前进
如果使用 JavaScript 替代方案开发 Web 使你感兴趣,那么 WebAssembly 和像 ASP.NET Core 的 Blazor 这样的框架值得投入一些时间。这些仍然是 WebAssembly 和基于 WebAssembly 的技术的早期阶段,但是扩展生态系统的承诺引起了我的注意。作为 Web 开发的忠实粉丝,我希望看到它向前发展并扩展应用程序如何为平台编写的想法。利用多年的 .NET 经验来构建应用程序以提高我的工作效率的前景令人兴奋。此外我已经为 JavaScript 技能打下了坚实的基础,我每天都在不断成长。通过这种多样性,技能可以作为工程师解决问题的视角和独特方式。

WebAssembly 会让你感兴趣吗?你打算测试 Blazor 吗?或者你是拥有Ruby或Python这样的背景的开发人员,想要在管道中使用WebAssembly?在下面的评论中分享你的想法。

英文原文:

https://www.telerik.com/blogs/goodbye-javascript-hello-webassembly

目录
相关文章
|
JavaScript 前端开发 测试技术
Node.js中的WebAssembly入门
Node.js中的WebAssembly入门 WebAssembly是一种令人兴奋的新语言,许多JavaScript引擎都支持它。WebAssembly有望使编译C和C ++等语言变得更容易在浏览器中运行。
5389 0
|
3月前
|
Rust 前端开发 JavaScript
震惊!JavaScript 与 WebAssembly 强强联合,开启前端性能传奇之旅,你准备好了吗?
【8月更文挑战第27天】在互联网飞速发展的今天,前端技术,特别是核心语言JavaScript,正经历着持续的革新。为了突破JavaScript在处理复杂计算时的性能局限,WebAssembly应运而生。作为一种高效的二进制格式,WebAssembly能以接近原生的速度在浏览器中运行,支持C、C++和Rust等语言编写的高性能代码。它与JavaScript相辅相成,前者专注于高性能计算任务(如游戏开发、图像处理),后者则负责页面的交互与逻辑控制。通过结合使用,二者为前端开发者提供了更为强大和灵活的工具集,共同推动前端技术进入一个全新的性能时代。
74 2
|
5月前
|
JavaScript 前端开发 算法
Box2D(现在通常称为Box2D.js或者其WebAssembly版本,Emscripten Box2D)是一个流行的2D物理引擎,用于模拟刚体动力学、碰撞检测与响应以及关节约束等物理现象
【6月更文挑战第16天】Box2D.js,基于C++的2D物理引擎,经Emscripten编译为WebAssembly,用于JavaScript游戏中的真实物理模拟,包含碰撞检测和关节约束。它提供高效的碰撞检测,易于扩展和定制物理属性。使用步骤涉及初始化世界、创建刚体、添加碰撞形状、模拟物理及处理碰撞事件。物理引擎虽提升逼真度,但也增加复杂性和性能需求。其他选项如p2.js、matter.js和ammo.js也可供选择。
134 8
|
6月前
|
Rust 前端开发 JavaScript
前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】本文旨在探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来革命性变化。传统上,JS一直是前端开发的核心,但随着Wasm的出现,我们看到了前端性能和功能的新天地。文章首先介绍Wasm的基本概念,然后分析其对前端开发的影响,包括性能提升、新功能实现以及开发模式的变化。最后,探讨了Wasm与JS融合的未来趋势,以及这种融合如何推动前端技术的进步。
|
6月前
|
Rust 前端开发 JavaScript
前端技术的未来演进:WebAssembly与JavaScript的深度融合
【2月更文挑战第11天】 在数字化时代,前端技术的迅速发展不仅推动了用户体验的革新,也促进了Web应用的性能提升。本文将探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)之间的深度融合如何成为前端技术发展的关键转折点。不同于传统的技术文章摘要,我们将通过一种叙事式的预览引导读者进入这一技术领域的探索之旅,揭示Wasm和JS结合后为前端开发带来的无限可能性和挑战。
|
6月前
|
Rust 前端开发 JavaScript
探索前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】 随着Web技术的不断进步,前端开发正迎来一场革命性变革。本文将深入探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来前所未有的性能提升与新的编程模式。我们将从两者的基本概念入手,探索它们各自的优势与局限,然后深入分析Wasm和JS协同工作时能够解锁的潜力,最后展望这一技术趋势如何塑造未来的前端开发生态。本文旨在为前端开发者提供洞见,帮助他们理解并准备好迎接这一即将到来的技术浪潮。
|
JSON JavaScript 前端开发
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块? 下
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块?
197 0
|
6月前
|
Web App开发 Rust JavaScript
Rust 笔记:WebAssembly 的 JavaScript API
Rust 笔记:WebAssembly 的 JavaScript API
164 0
|
Web App开发 存储 缓存
WebAssembly 的 JavaScript API
本文介绍 WebAssembly 的 JavaScript API。
193 1
|
JSON 编解码 Rust
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块? 上
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块?
170 0