在上世纪90年代互联网浪潮兴起之初,有两位先驱者洞察到一个关键问题:当时的浏览器功能极为有限,仅能展示图文并茂的网页并执行少量JavaScript脚本。与功能强大、界面精美且交互性强的桌面应用程序相比,这种体验显得过于简陋。
于是,一个大胆的构想被提出:能否将桌面应用程序的能力“移植”到浏览器中?这意味着未来用户只需打开浏览器,便能处理办公事务、编辑图像、畅玩游戏或欣赏影音——桌面端能做的一切,都将在浏览器中实现。
他们给出的解决方案是:浏览器插件。

其核心思路是为浏览器安装插件,然后通过网络下载代码并执行。然而,两位先驱选择了不同的技术路径:其中一位与微软合作,将其技术命名为 ActiveX;另一位则加入了Sun公司,与Java技术紧密结合,推出了 Applet。

他们的目标一度接近实现。看看当时的应用,其复杂的界面和交互已远超普通网页,几乎与桌面应用无异。

如果这一趋势得以延续,或许就不会有后来Vue、React等现代前端框架的兴起,前端开发者的主力语言也可能不是JavaScript,而是C#、VB.NET或Java。
但ActiveX与Applet都存在着致命的缺陷。
ActiveX 能力极强,能够访问计算机的几乎所有资源。这种能力虽然深受开发者喜爱,却让普通用户感到恐惧。想象一下,当你访问一个包含ActiveX控件的网站,并按照IE提示将其下载到本地后,该控件却删除了你硬盘上的文件——这无疑是一场安全噩梦。

更有甚者,一些流氓ActiveX插件(如著名的“3721”)一旦安装便难以彻底清除。因此,ActiveX技术仅在企业内网的受控环境中是一个不错的选择;一旦进入开放而复杂的互联网世界,其安全性问题便暴露无遗。
Applet 则显得更为“聪明”,它宣称自己运行在Java沙箱中,无法访问本地计算机资源。但它的短板同样明显:运行Applet需要Java运行环境(JRE),而JRE体积庞大且复杂。如果用户浏览器未安装JRE,漫长的下载和安装过程足以让人望而却步。此外,早期Java的GUI界面美观度不足,也劝退了许多用户。
加之ActiveX和Applet均非开放标准,难以获得其他浏览器厂商的广泛支持。最终,这两项技术逐渐淡出主流视野,浏览器运行复杂应用的第一次尝试宣告失败。网页技术回归到以HTML、CSS和简单JavaScript为主的状态。
转折点出现在Google推出Gmail和Google Maps之后。开发者们惊叹地发现,仅凭 JavaScript 也能构建出交互如此流畅的复杂应用!从此,JavaScript迎来了爆发式增长。
随着浏览器中需要执行的JavaScript代码量急剧增加,性能瓶颈开始显现。Google重新拾起了“Web即应用”的理想,但这次的基础是开放的JavaScript、HTML和CSS标准。为此,Google专门打造了Chrome浏览器,并内置了高性能的V8引擎,可将JavaScript编译成近似字节码的形式高效执行。

自此,JavaScript生态一路高歌猛进,jQuery、Angular、React、Vue等前端框架/工程化层出不穷,Web应用的能力边界被不断拓展。
然而,JavaScript作为一种动态解释型语言,在面对高性能计算需求时(如3D游戏、CAD设计、音视频编辑、计算机视觉及AR/VR等场景),依然力不从心。此外,下载、解析和编译巨型JavaScript应用包所带来的性能开销也令人难以承受。
浏览器需要一种新的能力:
- 能够执行一种接近原生速度的代码。
- 必须足够安全,能在沙箱环境中运行,并遵守浏览器的同源与权限策略。
- 能够与现有的Web技术(如JavaScript)无缝协作。
于是,WebAssembly(WASM) 应运而生,它被喻为“浏览器的汇编语言”。与插件时代不同,WASM是浏览器原生内置的虚拟机能力,既能执行JavaScript,也能执行WASM模块。

在新的架构下,JavaScript负责处理常规交互逻辑,而WASM则接管对性能要求极高的计算任务,二者协同工作。更重要的是,多种编程语言(如C/C++、Rust等)编写的代码均可被编译成WASM格式在浏览器中运行。

这指向一个未来:使用任何复杂应用,或许都只需在浏览器中输入网址即可,无需安装。分享应用也变得无比简单——只需发送一个链接。
回望历史,ActiveX和Applet无疑是技术先驱,它们最早提出了在Web中运行桌面级应用的愿景,只是过于超前而成了“先烈”。但Web技术的发展轨迹,终究还是朝着它们所预见的方向不断演进。浏览器的能力日益强大,或许终有一天,绝大多数应用都将“搬”到浏览器之中,那将是一场真正伟大的变革。