1995年,Java之父James Gosling前往蒙特利参加一个TED会议,他要在那里展示一项划时代的技术:Java。

当时Java还默默无闻,为了打响名声,它瞄准了新兴的互联网战场,准备在浏览器上做文章。
那时的互联网上网站稀少,大多是静态的HTML页面,充斥着“丑陋”的文本和简单的图片:

然而,在James Gosling的演示中,浏览器里竟然出现了一个动态的3D分子模型!这简直令人匪夷所思。

这个3D模型不仅出现了,还能用鼠标实时旋转,展示各种细节。从没人想过在浏览器里也能实现如此“美轮美奂”的效果!台下的观众彻底被镇住了,掌声雷动,惊叹连连。人们纷纷追问:“这到底是什么技术?用的什么编程语言?”
Java,一炮而红。
James Gosling演示所用的技术,就是 Applet。
在HTML页面中,一个Applet大概是这样嵌入的:
<applet codebase="." code="Hello.class" width="460" height="160">
</applet>
当浏览器解析到 <applet> 标签,就会调用已安装的Java插件,从服务器下载对应的.class文件,并在一个安全的沙箱环境中执行它。

我对Applet怀有特殊感情。学会Java的“Hello World”之后,我第一个上手实践的项目用的就是Applet技术。
当时有个同事总觉得“Applet”这词怪怪的,老把它叫做“小苹果”:“你的‘小苹果’开发得怎么样了?” 实际上,Sun公司(Java的创造者)取这个名字的逻辑是:Application + let。类似的还有Servlet,即 Server + let。这个命名逻辑让我印象很深,以至于后来神曲《小苹果》风靡全国时,我总是不由自主地联想到它。
我从C/S架构的桌面GUI开发转到B/S架构时,深感当时的HTML页面过于简陋。但B/S架构有个天生的巨大优势:应用无需分发安装,用户有个浏览器就能用。这时,我接触到了Applet,眼前为之一亮:无需安装就能在网页里运行,又能展现出接近桌面GUI的效果,这相当于结合了C/S的强交互和B/S的易部署两大优势,简直太酷了!
可是,这么酷的技术为何没能一统江湖呢?
稍作深入开发就会发现,Applet在当时的时代背景下有几个致命伤:
1. 用AWT/Swing写的界面“丑陋”
Applet的图形界面需要用Java的AWT以及后来的Swing库来编写。这两套工具包做出来的界面风格独特,但与本地操作系统原生的应用程序风格格格不入,用户体验不佳。
2. 运行速度太慢
上世纪90年代的PC性能孱弱,CPU慢,内存更是稀缺,有32MB内存都算不错了。早期的Java虚拟机性能也同样是短板,直到JDK 1.2才引入JIT(即时编译)技术。在此之前,即便是作为独立应用运行,Java的速度也常被C++程序员调侃,更不用说在浏览器里通过插件这种“套娃”方式来运行了。
3. 网速更是慢得感人
那是拨号上网的时代,网速以56K bit/s计。一个Applet程序稍大一些,用户就得面对漫长的加载等待。等待期间,浏览器里显示的往往是一个极其简陋的“大白板”:

如果这个Applet还需要特定版本的JRE(Java运行环境),用户不得不从网络下载,那可能就得等上一个多小时了。
此外,还有安全模型复杂、需要额外安装插件等问题。总而言之,Applet是一个看起来很美、但实际上非常“重”的解决方案,并且它是一个由Sun(后来是Oracle)一家控制的封闭生态。这对于崇尚开放、自由的互联网精神而言,是难以被广泛接受的。
后来的故事大家都知道了。AJAX技术兴起并彻底统治了浏览器端,HTML/CSS/JavaScript这套组合拳让前端界面可以做得精美绝伦,甚至超越了同期许多桌面应用的观感。Applet的所有优势荡然无存,逐渐沦为一些遗留系统中才会见到的技术。
随着时间的推移,各大主流浏览器开始嫌弃并逐步放弃对Applet插件的支持。最终,连JDK自己也“抛弃”了它。在最新发布的JDK 26中,官方已明确宣布:java.applet 这个包已被彻底移除!


让Java一战成名的Applet技术,至此正式走入了历史。
技术的发展浪潮总是这样,各领风骚三五年。许多曾经看起来很酷的技术,都消失在了信息技术飞速迭代的长河之中。这其中有技术本身的原因,有标准之争的原因,也有时代背景的原因。但有一条教训或许值得记取:技术生态要繁荣,开放之路往往比封闭控制走得更远。
有趣的是,多年以后,一项名为 WebAssembly 的技术出现了。它定义了一套类似Java字节码的二进制指令格式,可以用C/C++、Rust甚至Java等多种语言开发,编译后像当初的Applet一样部署在服务器,由浏览器下载并执行。与Applet最大的不同在于,运行WebAssembly是浏览器原生具备的能力,不再需要任何第三方插件了!
从某种意义上说,Applet也算后继有人了吧。
技术的发展史就是一部精彩的迭代史。如果你对这类技术演进的故事感兴趣,欢迎到云栈社区逛逛,那里有更多开发者分享的干货与见解。