”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > WebAssembly:您不知道自己需要的超能力

WebAssembly:您不知道自己需要的超能力

发布于2024-11-08
浏览:932

WebAssembly: The Superpower You Didn’t Know You Needed

如果你在开发圈里潜伏了足够长的时间,你可能听说过关于 WebAssembly(或 Wasm,因为开发者喜欢缩写词,就像我喜欢的那样)咖啡)。

它曾经被誉为“下一件大事”,这是一款闪亮的新工具,承诺将您的浏览器从一个不起眼的文档查看器转变为一个成熟的超级英雄。好吧,WebAssembly 已经存在几年了,你猜怎么着?它仍然在这里,兑现着这一承诺。 JavaScript 并没有退居二线,但 Wasm 一直在后台默默地做着一些繁重的工作,它已经成为 Web 性能游戏中坚实的合作伙伴。

那么,WebAssembly 到底是什么?

想象一下:JavaScript 和 C 出去喝酒,深入讨论速度和效率,然后繁荣 - WebAssembly 诞生了? Wasm 是一种低级的、类似汇编的语言,可以在浏览器中运行,旨在使 Web 应用程序更快、更高效,并且能够运行您从未认为浏览器可以处理的事情。可以将其视为您的浏览器,其连帽衫下有一个六块腹肌,准备好提升比 JavaScript 所能承受的更多的能力。

用简单的英语? WebAssembly 是一种编译代码格式,执行速度几乎与本机机器代码一样快,它旨在与 JavaScript 一起工作,而不是取代它。所以不,你不必将所有来之不易的 JS 技能都扔进垃圾桶。

为什么你应该关心? (或者:我们为什么要对此感到好奇?)

网络非常适合在 Twitter 上展示猫模因和无限滚动,但从历史上看,它在处理任何过于激烈的事情方面表现不佳 - 比如 3D 游戏、视频编辑或实时模拟。这就是 Wasm 介入的地方,看起来像一个超级英雄,准备将你的代码从低效的魔掌中拯救出来?

以下是 WebAssembly 带来的功能:

  • 速度:Wasm 运行真的快。就像,快速“缩短加载时间”。就像,“突然间,你为自己让 JavaScript 陷入困境而感到难过”。
  • 语言灵活性:您不必再将自己限制在 JavaScript 上。您可以使用 C、C、Rust 等语言进行编码。 WebAssembly 不在乎——它会将所有这些转化为浏览器中超快的性能。这是编程语言的瑞士:中立,但秘密强大。
  • 浏览器的超能力:想要直接在浏览器中运行 3D 游戏、CAD 软件或机器学习模型,而不让计算机在后台运行? Wasm 使之成为可能。您的浏览器不再是“文字处理器”,而是变得更像“钢铁侠套装”。

“但我是一名 Web 开发人员,JavaScript 就是我的选择!”

首先,你不必与 JavaScript 分手。 Wasm 玩得很好吗?将 Wasm 视为 JavaScript 的肌肉伙伴,当 JS 在运行几个循环后变得喘不过气来时,它可以帮助解决繁重的工作。

事实上,WebAssembly 确实可以让你的 JS 代码更好。如果您有一些对性能要求较高的任务(例如复杂的计算、文件解析或视频渲染),您可以将它们交给 Wasm,并让它处理繁重的工作,而 JS 则专注于其通常的 DOM 操作魔法。

JavaScript 和 WebAssembly 之间的关系就像超级英雄团队一样,聪明的人 (JS) 和强壮的人 (Wasm) 共同努力拯救世界。两者都没有被取代——它们只是在一起变得更好。比如花生酱和果冻。或者制表符和空格(开玩笑,别引发口水战)。

“好吧,好吧……但是我如何开始使用 WebAssembly?”

第一步:呼吸。 Wasm 可能听起来很吓人,但它并不难使用 - 特别是如果您曾经使用 C、C 或 Rust 等编译语言编写过。如果你还没有?好吧,恭喜! WebAssembly 是一个很好的借口,可以帮助您最终学习一直回避的令人生畏的语言。

第2步:获取可以生成Wasm的编译器。有很多工具可以获取您的代码(C、C、Rust 等)并将其编译为 Wasm。 Emscripten 是 C/C 项目的热门选择,而 wasm-pack 非常适合 Rust 项目。

第三步:将其放入浏览器中。将代码编译到 WebAssembly 后,您可以将其加载到浏览器中并开始利用这些令人愉悦的性能提升。不过,Wasm 并不引人注目——它旨在与 JavaScript 协调工作。您的 JavaScript 代码将调用 WebAssembly 函数,就像它们只是该组的一部分一样。没有剧情。

第四步:利润。或者,至少,坐下来享受观看您的网络应用程序突破性能瓶颈的过程,就像它有一个氮气按钮一样。

WebAssembly 会统治世界吗?

听着,我们并不是说 WebAssembly 会让 JavaScript 过时,或者你的浏览器会因为运行近乎本机代码的强大力量而开始自发燃烧。但是……也许

实际上,WebAssembly 的未来更多的是补充现有的 Web 生态系统,而不是取代任何东西。这是一个工具。是的,这是一个强大的工具 - 但它只是为了提供帮助,而不是为了推翻 JavaScript 君主制。虽然 Wasm 成为整个网络的主流可能还需要几年的时间,但它已经在游戏、多媒体应用程序甚至区块链领域掀起了波澜。是的,区块链。因为显然,没有 Wasm 不会去的地方。

最后的想法:Wasm 是真正的交易

如果 WebAssembly 是一个人,那么这个朋友就会突然出现,帮助你搬动沉重的家具,然后离开时不问披萨。它在这里做肮脏的工作:繁重的计算、性能优化,以及将浏览器转变为一个强大的引擎,其功能比我们想象的要多得多。

因此,如果您希望突破 Web 应用程序的极限,或者只是想让您的浏览器感觉像是经过了一些超级英雄训练,那么 WebAssembly 会为您提供支持?请记住,强大的功能会带来出色的编译时间?.

关于我

嗨,我是programORdie,这是我的第一篇真正的文章,我希望得到您的反馈,所以请随时发表评论!
您还可以查看我的项目或访问 GitHub:programORdie2.

希望您喜欢这篇文章,祝您有美好的一天!?

版本声明 本文转载于:https://dev.to/programordie/webassembly-the-superpower-you-didnt-know-you-needed-c9o?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • `&deployment` 指针如何实现 Kubernetes 中的 `runtime.Object` 接口?
    `&deployment` 指针如何实现 Kubernetes 中的 `runtime.Object` 接口?
    &deployment指针如何满足运行时对象接口在Kubernetes代码中,kubectl/run.go中的Generate函数返回包含runtime.Object 和错误的结果列表。函数最后一行,return &deployment, nil,将局部变量deployment的地址赋值给r...
    编程 发布于2024-11-08
  • 用于带或不带协议的 URL 匹配的通用正则表达式
    用于带或不带协议的 URL 匹配的通用正则表达式
    匹配带或不带协议的 URL 的正则表达式对于可能包含或不包含“http://www”前缀的 URL ,可以使用正则表达式来执行匹配操作。下面提供了详细的正则表达式模式:((https?|ftp)://)?([a-z0-9 !*(),;?&amp=$_.-] (:[a-z0-9 !*(),;?...
    编程 发布于2024-11-08
  • 如何防止 Foreach 循环输出中出现尾随逗号?
    如何防止 Foreach 循环输出中出现尾随逗号?
    消除 Foreach 循环中的尾随逗号在编程中,通常需要迭代项目列表并单独输出每个项目通过分隔符,例如逗号。但是,当使用 foreach 循环执行此任务时,您可能会遇到最后一项后面出现尾随逗号的问题。考虑以下 PHP 代码:foreach ($this->sinonimo as $s){ ...
    编程 发布于2024-11-08
  • LZ C++ React Native 绑定,实现极快的压缩算法
    LZ C++ React Native 绑定,实现极快的压缩算法
    我最近开始涉足 JSI 和 C,因此,我必须构建一个名为react-native-lz4 的小包。它是一个在 React Native 中使用 C 编写的 LZ4 算法进行快速文件压缩的​​库。 它仍处于实验阶段,因为我仍在完善错误处理并扩展其 API,但它已经可以使用(谨慎!) 包:https:/...
    编程 发布于2024-11-08
  • JVM GC 能像 Go 一样实现 1ms 以下的暂停吗?
    JVM GC 能像 Go 一样实现 1ms 以下的暂停吗?
    JVM 能否像 Go 一样将 GC 暂停时间减少到 1 毫秒以下?Go 编程语言拥有较低的 GC 暂停时间,通常低于 100 微秒。然而,Java 虚拟机 (JVM) 在实现类似性能方面面临着挑战。架构限制历史上,Go 和 Java 之间的架构差异影响了 GC 暂停时间.Go 的非压缩收集器: Go...
    编程 发布于2024-11-08
  • 如何在 PHP 中根据特定键对多维数组进行自定义排序?
    如何在 PHP 中根据特定键对多维数组进行自定义排序?
    多维数组的自定义排序对多维数组进行排序是编程中的常见任务。本文演示如何使用 PHP usort() 函数根据特定键对此类数组进行排序。理解任务考虑以下多维数组,其中每个元素代表一条记录:Array ( [0] => Array ( [iid] =...
    编程 发布于2024-11-08
  • 如何在 Laravel 5 中使用数字规则验证数字输入的长度?
    如何在 Laravel 5 中使用数字规则验证数字输入的长度?
    Laravel 5 中数字输入的长度验证在 Laravel 5 中验证数字输入的长度时,可能会遇到大小规则问题。它不检查输入的长度,而是检查输入是否完全等于指定的大小。要解决此问题,应使用数字规则。根据 Laravel 文档:$rules = [ 'national-id' => 'r...
    编程 发布于2024-11-08
  • 如何从 jQuery 下拉列表中检索选项的文本?
    如何从 jQuery 下拉列表中检索选项的文本?
    从 jQuery 下拉列表中检索选项文本获取与 jQuery 下拉列表中的特定选项标记关联的文本,使用以下技术:Option Based on Value获取文本具有特定值的选项,即使未选择,也使用选择器:$("#list option[value='2']").text();此...
    编程 发布于2024-11-08
  • 使用 Slack、GitHub、Jira、Google 工具等进行有用的自动化
    使用 Slack、GitHub、Jira、Google 工具等进行有用的自动化
    我们使用与各种应用程序(如 GitHub、Slack、Jira、Google Calendar、Google Sheets 等)的集成,在 AutoKitteh 上部署的 Python 中构建了相对简单但有用的自动化。例如: 使用 ChatGPT 对 Gmail 收件箱中的新电子邮件进行分类,并将通...
    编程 发布于2024-11-08
  • 如何使用 Kubernetes go-client 检索详细的 pod 信息,类似于“kubectl get pods”命令?
    如何使用 Kubernetes go-client 检索详细的 pod 信息,类似于“kubectl get pods”命令?
    Kubernetes go-client:检索 Pod 详细信息 像 kubectl get pods使用 client-go 库获取 Kubernetes 集群中的 pod 详细信息,与 kubectl get pods -n 命令类似,步骤如下:创建 Kubernetes 客户端:获取 Kub...
    编程 发布于2024-11-08
  • 使用 nodeJS 从头开始​​创建 ReAct Agent(维基百科搜索)
    使用 nodeJS 从头开始​​创建 ReAct Agent(维基百科搜索)
    Introduction We'll create an AI agent capable of searching Wikipedia and answering questions based on the information it finds. This ReAct (R...
    编程 发布于2024-11-08
  • 为什么 Streams API 改变了 Web 开发者的游戏规则
    为什么 Streams API 改变了 Web 开发者的游戏规则
    我们首先解释一下数据是如何通过网络发送的。它不是作为单个连续流发送的;相反,它被分成更小的块。在接收端,消费者或应用程序负责在收到所有数据后以正确的顺序和格式重新组装这些块。对于图像、视频和其他相对较大的数据类型,此过程会自动发生。 因此 Streams API 提供的是一种无需等待完整数据可用的方...
    编程 发布于2024-11-08
  • ES6 模板文字真的可以重用吗?
    ES6 模板文字真的可以重用吗?
    ES6 模板文字中的可重用性难题本次讨论中提出的主要问题围绕着 ES6 模板文字中假定缺乏可重用性的问题。传统的演示强调声明时的替换,不允许运行时修改。解决方案:利用函数构造函数为了解决这个问题,一个可行的解决方案以以下形式出现:函数构造函数。这种方法涉及将模板字符串转换为函数。考虑以下代码片段:c...
    编程 发布于2024-11-08
  • 单元测试框架——Python 中的单元测试
    单元测试框架——Python 中的单元测试
    在Python中,最常用的单元测试框架之一是unittest,它包含在标准库中。它提供了一套丰富的工具来创建和运行测试以及报告结果。 单元测试框架的主要特点 测试用例:测试用例是通过子类化unittest.TestCase来创建的。类中以 test_ 开头的每个方法都被视为一个测试。 Asserti...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3