WebAssembly影响未来WEB技术

简介: WebAssembly(缩写为 Wasm)是一种用于基于堆栈的虚拟机的二进制指令格式, Wasm 被设计为编程语言的可移植编译目标,支持在 Web 上部署客户端和服务器应用程序,它可能会终结所知道的互联网上的隐私和安全。

WebAssembly(缩写为 Wasm)是一种用于基于堆栈的虚拟机的二进制指令格式, Wasm 被设计为编程语言的可移植编译目标,支持在 Web 上部署客户端和服务器应用程序,它可能会终结所知道的互联网上的隐私和安全。

WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。—— MDN Web Docs

WebAssembly 之前

每一项新技术的诞生都是为了解决一些现有的问题,WebAssembly 的出现是为了解决网络问题。

如今,前端应用程序变得越来越重,功能也变得更加复杂,除了逻辑复杂、代码量大之外,还有一个原因是语言本身的缺陷。Brendan Eich 创造了被广泛使用的解释性编程语言 JavaScript ,使得它的发展历史在一定程度上变成了一个填补漏洞的历史。

JavaScript 主要有两个问题。

性能

与其他解释型编程语言类似,JavaScript 很慢。至少在2008年之前,速度很慢。

与其他解释型编程语言类似,JavaScript的速度很慢。至少在2008年之前,它是非常缓慢的。随着越来越多的web应用程序采用JavaScript,浏览器之间的性能大战开始了。JIT(Just-In-Time compiler)的引入是为了解决JavaScript的性能问题。谷歌的V8和微软的 ChakraCore 都带有JIT(甚至是多阶段JIT)。

image.png

由于其设计为动态语言,因此有几类优化可供其他编程语言使用,但即使是最快和最现代的 JavaScript 运行时也无法使用,例如,提前(AOT)优化编译策略。

鲁棒性和可维护性

使用 JavaScript 等动态编程语言,可以快速构建项目,但当项目规模变大时,就会变得一团糟。

静态类型可以更轻松地处理复杂系统,它可以帮助在编译时更快地捕获类型不匹配,并使其更易于优化。

例如,在动态类型编程语言中,如果不小心输入,可能会做一些奇怪的事情,比如尝试将数字1与字符串 "2" 相加,结果得到字符串 "12" 。但这种类型的错误应该在开发阶段捕捉,简单地说,动态类型具有“先写后调试”的风格,而静态类型涉及“先思考后写”的风格。

要在 JavaScript 中添加静态类型,有以下几种方法:

  • TypeScript:建立在JavaScript之上,添加了静态类型定义。
  • ReasonPureScript:翻译程序将其他静态类型语言(如OCaml/Haskell)编译成JavaScript。
  • asm.js(已弃用):定义一个严格的JavaScript子集,可以用作编译器的低层次、高效的目标语言——特别是允许编译器进行预先(AOT)优化编译。可以使用一个源到源的编译器,比如Emscripten,将静态类型语言(比如C)编译成 asm.js。

WebAssembly 简介

虽然 asm.js 在性能上比原始 JavaScript 有所改进,但它本质上仍然是 JavaScript 。在某些情况下,生成的文件将变得太大,并为需要频繁传输的代码带来瓶颈。

由于  asm.js  代码主要用作编译目标,不会手动编辑它,因此有必要发明一种二进制格式,这基本上是 WebAssembly 的起源:

WebAssembly (缩写Wasm)是一种用于基于堆栈的虚拟机的二进制指令格式,Wasm是为编程语言设计的可移植编译目标,支持在web上部署客户机和服务器应用程序。——WebAssembly的网站

WebAssembly 于 2015 年首次发布,第一个演示是运行 Unity 的“愤怒的机器人”。可以在 WebAssembly Games 上玩更多部署在 WebAssembly 上的游戏。另一个经典演示是 Mozilla 的 Zen Garden (Epic)。

2019 年 12 月 5 日,WebAssembly 成为继 HTML、CSS 和 JavaScript 之后的官方“Web第四语言”。

WebAssembly 是一种不同于 JavaScript 的语言,但它并不是用来替代 JavaScript 的。相反,它被设计成与 JavaScript 互补并协同工作,允许web开发人员充分利用两种语言的优点。

可以通过 WebAssembly 重用嵌入在更大的 JavaScript/HTML 应用程序中的现有代码,这可以是任何东西,从简单的助手库到面向计算的任务卸载。

image.png

WebAssembly 能做什么?

WebAssembly 提供了卓越的性能,这意味着网站运行速度几乎可以和浏览器以外的普通软件一样快。它允许浏览器运行过去由于性能问题而无法使用的软件和游戏,它将使复杂的 WebVR 体验成为可能。

发现非常有趣的 WebAssembly 应用程序之一是 Microsoft 的 Blazor。微软所做的基本上是将他们的整个 .NET 平台移植到 WebAssembly 并在上面添加一个 UI 库。

WebAssembly 尝试

在 WebAssembly 中,有两种常用的文件格式,这两种格式可以相互转换。:

  • .wat :一种基于 S 表达式的文本格式和一种设计用于在文本编辑器、浏览器开发工具等中公开的中间形式。
  • .wasm :一种可以被 WebAssembly 的虚拟机读取和运行的二进制格式。

如果只是在尝试 WebAssembly,可以使用 WasmExplorer 来输入一些 C/C++ 代码。可以将 C/C++/Rust 或其他源代码转换为 .wat 格式,然后将 .wat 格式汇编为 .wasm

目前,大多数 Web 浏览器已经支持 WebAssembly,可以尝试打开浏览器的控制台并输入如下输入:WebAssembly.compile

对于初学者,最好的教程是官方文档,可以选择最熟悉的编程语言,编译成WASM格式。

wasmtime 是 WebAssembly 的独立运行时,wasmer 不仅是一个运行时,而且支持使用超轻量级容器。

WebAssembly 的未来

WebAssembly 还有许多功能正在开发或处于提案阶段,尽管现在还不完整,但未来它会影响客户端 Web 开发、桌面应用程序、服务器端功能、遗留现代化、游戏、无服务器等领域。


相关文章
|
1天前
|
缓存 监控 算法
构建高性能Java Web应用的技术策略
构建高性能Java Web应用的技术策略
|
5天前
|
移动开发 开发框架 JavaScript
技术心得记录:手机Web开发框架
技术心得记录:手机Web开发框架
|
6天前
|
前端开发 Java
技术经验分享:idyll开源生成交互式web的标记语言试用
技术经验分享:idyll开源生成交互式web的标记语言试用
|
9天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
|
12天前
|
存储 安全 Java
在Spring Boot Web应用中,会话技术和会话跟踪
在Spring Boot Web应用中,会话技术和会话跟踪
21 2
|
13天前
|
监控 小程序 前端开发
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
|
19天前
|
资源调度 JavaScript 前端开发
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳定使用,我决定把官方新推出的 webim-vue3-demo,打包到桌面端,并记录了这次验证的过程以及所遇到的问题和解决方法。
29 2
|
20天前
|
SQL 安全 数据库
如何构建一个安全的Web应用:技术与策略的全面指南
【6月更文挑战第12天】构建安全Web应用的全面指南:了解SQL注入、XSS等威胁,采用输入验证、安全编程语言,配置安全服务器和数据库,使用HTTPS,实施会话管理、访问控制,正确处理错误和日志,定期进行安全审计和漏洞扫描。确保用户数据和应用安全。
|
20天前
|
机器学习/深度学习 人工智能 前端开发
WebAssembly:浏览器中的新语言,引领Web性能革命
【6月更文挑战第12天】WebAssembly,简称Wasm,是浏览器中的新语言,旨在带来近乎原生的性能,引领Web性能革命。它具有高效、可移植、安全和多语言支持的特点,适用于游戏开发、图形处理、计算机视觉等领域。随着浏览器支持增强,Wasm将在跨平台应用、AI、机器学习、云计算和边缘计算中发挥更大作用,推动Web应用的发展。
|
23天前
|
缓存 前端开发 数据库
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用所需的关键技术。我们将探讨前端、后端、数据库等多个方面的技术,并提供实用的建议,帮助开发者优化应用性能并提升用户体验。