HTML5崛起之时,Java桌面时代就已经终结了
來源:AI前線
作者:Steve Hannah
翻譯:核子可樂
編輯:燕珊
2004 年 Google Maps 的面世標(biāo)志著 Java 桌面時代的終結(jié),也改變了桌面環(huán)境下“跨平臺”的基本定義。
本文作者以個人視角對 Java 桌面發(fā)展歷程做了回顧,內(nèi)容來自他在上世紀(jì)九十年代后期擔(dān)任 Java 開發(fā)者時的所見所感,主要講述曾經(jīng)的“殺手級”桌面語言 Java 是為何從 21 世紀(jì)開始頹勢盡顯、步入衰落的。值得一提的是,作者如今在做一款開發(fā)者友好型 Java 桌面部署工具(jDeploy),其實(shí)他還是希望 Java 可以重拾風(fēng)采,再度變得對桌面開發(fā)具有吸引力。
本文是該回顧系列文章中的第二篇,在上期文章中,作者回顧了 Java 制霸桌面的鴻圖如何在 1999 至 2005 的短短幾年間煙消云散。當(dāng)初的 Java 可謂志得意滿、憑 Applet 小程序技驚四座,下決心要在互聯(lián)網(wǎng)時代下重新定義“桌面”。互聯(lián)網(wǎng)的未來在于“跨平臺”,而 Java 的血管中涌動的正是“跨平臺”的血液,優(yōu)勢在握!可遺憾的是,事后來看,此跨平臺似乎并非彼跨平臺。接下來,讓我們繼續(xù)跟著作者的腳步去看看,具體在 2004 至 2007 年間,Java 桌面又經(jīng)歷了什么。
桌面王朝的最后時光
2002 年左右,我在客服中心為客戶提供計(jì)算機(jī)與打印機(jī)技術(shù)支持。我和小伙伴們擠在小小的隔間里,面對著一款桌面程序。通過這款軟件,我們可以快速查詢客戶和產(chǎn)品信息,并把通話中的重要信息記錄進(jìn)去。
在典型的客服來電中,我們會詢問客戶的產(chǎn)品序列號,再把結(jié)果輸入系統(tǒng)。如果他們之前就打過電話,系統(tǒng)就會輸出窗口,里面包含產(chǎn)品的完整歷史記錄和之前的求助細(xì)節(jié)。在參考其他同事留下的事由記錄后,我還能操作界面中的選項(xiàng)卡和功能按鈕,例如幫客戶更換新機(jī)。
我不記得這款軟件叫什么名字了,可能是為公司或者客服中心專門定制的吧。印象里這應(yīng)該是 PeopleSoft(仁科公司,2005 年已被甲骨文收購)的產(chǎn)品,但我也不太確定。總之,這款桌面軟件運(yùn)行在 Windows 2000 系統(tǒng)上,肯定不是 Web 應(yīng)用程序。它其實(shí)挺復(fù)雜,里面包含不少菜單和表單;不過一旦上手,整個使用體驗(yàn)相當(dāng)棒——速度快、反應(yīng)靈敏,幾乎沒有任何延遲。以輸入電話號碼查詢客戶記錄為例,我們只需要在“電話”字段里輸入號碼,其余空白表格就會立刻被客戶信息填充完整。
據(jù)我所知,這款程序肯定不是用 Swing 編寫的。但如今全球各地?zé)o數(shù)公司都在使用由 Swing 編寫的企業(yè)級桌面軟件,它們在使用體驗(yàn)上跟我當(dāng)初接觸的這款程序非常相似。換句話說,Swing 已經(jīng)滿足了我們在 2001、2002 年那會對于桌面業(yè)務(wù)軟件的全部期望和想象。
在工作半年之后,上邊來了新指示,要求我們用 Web 應(yīng)用程序替換掉之前的桌面軟件。據(jù)說新系統(tǒng)會讓我們的工作更輕松,但在第一節(jié)培訓(xùn)課剛剛過去十分鐘后,我們就意識到這根本就是胡說八道:新系統(tǒng)簡直爛透了!
我不太記得當(dāng)時使用的是 IE 5.5 還是 IE 6 了,總之就是前 AJAX 時代的 Web 環(huán)境。現(xiàn)在在產(chǎn)品字段中輸入序號后,系統(tǒng)會彈出一個窗口,上面寫著“正在加載……請勿關(guān)閉此窗口”。幾秒后,窗口自行消失,客戶詳細(xì)信息出現(xiàn)在表單當(dāng)中。反正每當(dāng)需要從服務(wù)器獲取內(nèi)容時,這個倒霉窗口就會跳出來。領(lǐng)導(dǎo)還提醒我們別隨便在瀏覽器里點(diǎn)“刷新”,說是這樣會破壞系統(tǒng)狀態(tài)。于是每每出現(xiàn)問題,我就只能先登出、再重新登錄。
我不太理解公司為什么要用這款“傻了吧唧”的 Web 應(yīng)用程序替代之前的桌面軟件。可能是出于成本考慮吧,畢竟跟桌面軟件相比,Web 應(yīng)用程序的開發(fā)和維護(hù)成本都更低。或者是軟件供應(yīng)商強(qiáng)行施壓,比如“Web 才是未來,每個人都必須接受!”但,真有這么強(qiáng)勢的乙方嗎?
無論如何,這里透露出一個重要的信息:Web 應(yīng)用程序還沒等發(fā)展完善,就已經(jīng)開始蠶食桌面軟件的生存空間。唯一的問題就是 Web 應(yīng)用需要多久才能追平桌面軟件的使用體驗(yàn)。而事實(shí)證明,用不了多久。
恐怖谷效應(yīng)
再回到 Java 這邊。熱情的支持者們正不斷擴(kuò)大 Java 帝國的桌面版圖,對 WORA(一次編寫、隨處運(yùn)行)的熱情也引導(dǎo)他們最終邁向跨平臺小程序與“本機(jī)”應(yīng)用程序之間的秘密山谷。那時候的 Java IDE 主要面向三大構(gòu)建目標(biāo):
1. 小程序
2. Java Web 開發(fā)
3. 可執(zhí)行 Jar 文件
是的,沒有直接開發(fā)本機(jī)應(yīng)用程序的選項(xiàng)。雖然有第三方工具可以把 Jar 文件轉(zhuǎn)換為本機(jī)應(yīng)用程序,但這類工具相當(dāng)復(fù)雜而且操作流程極為繁瑣。只有對自己最“狠”的人才能堅(jiān)持用得下去。而 Java 之所以有勇氣忽視這一點(diǎn),靠的就是對未來的判斷——本機(jī)桌面應(yīng)用程序終于被淘汰。其實(shí)這個預(yù)言是正確的,只是在時間上有所偏差。
從 2022 年的角度回顧,Java 身上其實(shí)有很多顯而易見的問題。應(yīng)用程序可以作為 Web 部署、也可以按本機(jī)部署,但這兩種形式都沒有一丁點(diǎn)“原生”感。Web 部署的小程序運(yùn)行在自己的“沙箱”內(nèi)并被集成到網(wǎng)頁當(dāng)中,整個運(yùn)行過程又慢又遲鈍。
HTML5 的崛起
雖然 Java 總想在 Web 和桌面之間建起一道橋梁,但它自身卻被 Web 所裹挾。到 2002 年,很多企業(yè)開始把原本的桌面軟件功能遷移到 Web 端。這些 Web 應(yīng)用程序的構(gòu)建、維護(hù)和部署成本確實(shí)比桌面軟件低得多,代價就是在用戶體驗(yàn)上做出妥協(xié)。
大約也是在這個時候,Java 開始推崇“富互聯(lián)網(wǎng)應(yīng)用”的概念,希望把好 Web 應(yīng)用跟差 Web 應(yīng)用區(qū)分開來。但到 2004 年 Google Maps 正式亮相時,Java 的小把戲徹底宣告破產(chǎn)。Google Maps 以令人震驚的效果為富 Web 應(yīng)用程序樹立了標(biāo)桿,而人家用的是 HTML5。
我最近又看了一次 Bill Atkinson 第一次向蘋果愛好者們展示 MacPaint 的舊視頻。在他第一次通過鼠標(biāo)用畫筆工具繪出圖案時,現(xiàn)場一片“哇哦”和掌聲。這就叫開創(chuàng)性。我第一次看到 Google Maps 也是類似的感覺,地圖可以無縫縮放、萬向平移,壓根看不出來任何拼接的痕跡。這里使用的全新技術(shù)被稱為 AJAX(異步 JavaScript 與 XML),這也是人們第一次能夠在 Web 應(yīng)用程序中向服務(wù)器后臺無縫發(fā)出請求。現(xiàn)在這一切當(dāng)然被視為理所當(dāng)然,可 2004 年那會,開發(fā)者需要絞盡腦汁才能把那些讓人想吐的框架或者彈窗隱藏起來,確保不用刷新整個頁面就能從服務(wù)器處加載新數(shù)據(jù)。
身為 Web 開發(fā)者,我當(dāng)然對其中的無窮可能性心生向往。但從桌面開發(fā)的角度看,這場歷史性的變革似乎沒有給桌面、特別是 Java 帶來任何影響。
在 HTML5 之前,“跨平臺”的意思是“跨 Windows、Mac 和 Linux”,所以跨的范圍還是在桌面范疇之內(nèi)。當(dāng)時我并沒意識到,但現(xiàn)在來看 HTML5 的亮相代表著新平臺時代的降臨——它將成為客戶端應(yīng)用程序的客觀標(biāo)準(zhǔn);更重要的是,Java 支持不了這個平臺。突然之間,WORA 理念就出現(xiàn)空白了——Swing 應(yīng)用程序適用于一切平臺,除了最重要的那個:網(wǎng)絡(luò)瀏覽器。
Java 開發(fā)者紛紛“外逃”
那 Java 桌面開發(fā)者們都跑哪去了?方向主要有三:
1. 服務(wù)器
2. 瀏覽器(HTML5)
3. 桌面應(yīng)用
如果大家對自己的基本定位首先是“Java 開發(fā)者”、其次是“客戶端開發(fā)者”,那最終應(yīng)該會選擇 Java 在當(dāng)下仍然占據(jù)主動的平臺——服務(wù)器。如果你對面向用戶開發(fā)(客戶端)更感興趣,而且主要看中 Java 的跨平臺價值主張,那接下來的目標(biāo)很可能是 HTML5 (Javascript/HTML/CSS)開發(fā)。如果你是鐵桿“保皇黨”(比如說我),那就繼續(xù)堅(jiān)守 Java 桌面開發(fā),同時滿腹狐疑地看著自己這個圈子越來越小。
GWT:讓 Java 走進(jìn)瀏覽器
2000 年初,JavaScript 開發(fā)工具尚處于起步階段。大多數(shù) Web 開發(fā)者只能使用文本編輯器來編寫.js 文件。簡單的驗(yàn)證腳本和交互設(shè)計(jì)倒是沒問題,但這種粗糙的方法肯定不能擴(kuò)展并支持大型企業(yè)應(yīng)用程序項(xiàng)目。另外,當(dāng)時的 JavaScript 語言還不具備開發(fā)者在重構(gòu)等重要操作時所需要的功能,例如靜態(tài)類型。
相比之下,Java 已經(jīng)擁有一套全面的開發(fā)工具,能夠輕松擴(kuò)展至任何規(guī)模的項(xiàng)目。到 2004 年,領(lǐng)先且成熟的 Java IDE 已經(jīng)成為開發(fā)環(huán)境中的標(biāo)桿,其中的靜態(tài)類型更是大大簡化了大型項(xiàng)目的維護(hù)難度。到這時,唯一的遺憾就是 Java 應(yīng)用程序無法在網(wǎng)絡(luò)瀏覽器中運(yùn)行(只有小程序可以)。
為了解決這個難題,Google 打造出 GWT(Google Web Toolkit)。這是一套 Java 到 JavaScript 的編譯器加運(yùn)行時庫,允許開發(fā)者借助 Java 那一整套領(lǐng)先的開發(fā)工具編寫應(yīng)用程序,再把成果部署成 JavaScript 應(yīng)用的形式在瀏覽器內(nèi)原生運(yùn)行。這套運(yùn)行時庫包含諸多核心 Java API(例如 java.lang、java.util 等)的實(shí)現(xiàn),確保業(yè)務(wù)邏輯能夠在 GWT 應(yīng)用程序與服務(wù)器應(yīng)用程序間順暢共享。
在用戶界面方面,GWT 也提供自己的功能部件,其實(shí)質(zhì)就是以 Java 的形式將各部件與瀏覽器中的本機(jī) HTML 部件相綁定。雖然我們還是沒法直接使用 Swing 代碼、大部分第三方庫也不在支持之列,但我們至少可以用到自己最熟悉的 Java 開發(fā)環(huán)境和核心 API。
所以這不能算是讓 Java 真正走進(jìn)了瀏覽器——標(biāo)準(zhǔn) JavaSE 庫仍然大部分不受支持,線程等核心功能也無法起效。但至少對多數(shù)用例來說,這已經(jīng)夠了。
Google 用 GWT 開發(fā)出很多流行一時的 HTML5 應(yīng)用程序,其中最著名的就是 Gmail,這個項(xiàng)目還催生出一個規(guī)模不大、但卻相當(dāng)活躍的開源社區(qū)。雖然影響力已經(jīng)今非昔比,但這個社區(qū)直到現(xiàn)在也仍然存在。與此同時,JavaScript 工具的逐步改進(jìn)也在擠占 GWT 的生存空間,過去十年來誕生的一系列更為現(xiàn)代的解決方案也允許我們在瀏覽器中更“無腦”地使用 Java。
服務(wù)器上的淘金熱
HTML5 的出現(xiàn)顛覆了 Java 制霸桌面的野心,但這里也有好消息。由于不必分神于桌面端,Java 在服務(wù)器端迎來了全面發(fā)展。Java 做好了戰(zhàn)斗準(zhǔn)備、努力滿足開發(fā)者對后端服務(wù)的種種新需求——畢竟沒有后端,再好的 Web 應(yīng)用也出不來。
Java 在服務(wù)器端的受歡迎程度在接下來幾年中持續(xù)增長,也吸引到整個生態(tài)系統(tǒng)的高度關(guān)注。第三方庫不斷涌現(xiàn),而 2005 年 Maven 的誕生也讓第三方庫的使用不再復(fù)雜繁瑣。無需額外下載、不必尋找依賴項(xiàng),直接把片段粘貼到 pom 文件中,它就能自動下載一切相應(yīng)依賴項(xiàng)。
Java 的開發(fā)工具也在不斷改進(jìn),這在很大程度上要?dú)w功于 Java 在服務(wù)器端的優(yōu)勢地位。這些改進(jìn)也對桌面開發(fā)者產(chǎn)生了積極影響,讓我們用上了跟服務(wù)器端相同的 IDE、編譯器、虛擬機(jī)和庫。然而,代表 Java 世界“最后的堅(jiān)持”的這幫桌面開發(fā)者眼界還是沒能打開,仍在圍著 UI 庫的改進(jìn)和部署打轉(zhuǎn)。
遇到問題時,我的習(xí)慣是上 Google 搜一搜,看看有沒有其他人遇到或者已經(jīng)解決過相同的問題。但在 Swing 開發(fā)上,我發(fā)現(xiàn)最新的搜索結(jié)果也基本是 2005 年左右的內(nèi)容了,之后基本再無新增。在找不到答案時,我偶爾會寫一篇問題分析博文。而在兩年后再次遇到類似問題時,我在 Google 上找到的就是自己兩年前那篇博文……說真的,現(xiàn)在還有喘氣的 Swing 開發(fā)者嗎?感覺真的說不好。
重新定義“桌面應(yīng)用”
從各個方面來看,Web 的興起讓“桌面應(yīng)用”的概念清晰了起來。Java 最初的跨平臺客戶端開發(fā)愿景并沒有把瘦客戶端(主要與遠(yuǎn)程服務(wù)器交互)跟本機(jī)完整桌面應(yīng)用程序區(qū)分開來。這不僅提高了理解難度,更讓安全模型的設(shè)計(jì)有些無所適從。Java 理解中的“平臺”就是計(jì)算機(jī)本身,所以會使用笨拙的沙箱來限制可能引發(fā)安全威脅的 API 訪問,例如訪問文件系統(tǒng)。這是 Java 一切安全漏洞的根源,也是導(dǎo)致 Java 被逐出瀏覽器世界的原因。
這種基于“沙箱”的開發(fā)體驗(yàn)相當(dāng)糟糕,因?yàn)槲覀兒苋菀滓馔狻霸浇纭辈⒂|發(fā)安全異常。最終結(jié)果是,幾乎所有客戶端都會請求對系統(tǒng)進(jìn)行“可信”訪問,這樣也就完全繞過了沙箱的限制。
相比之下,HTML5 在 Web 和桌面之間設(shè)立了明確的邊界。Web 應(yīng)用程序默認(rèn)無權(quán)訪問客戶端計(jì)算機(jī),而瀏覽器才是那個“平臺”,這就讓客戶端應(yīng)用程序的安全保障變得更輕松、更易行。
經(jīng)過此番變革,“桌面”的范疇變得更小,以往很多被視為“桌面應(yīng)用程序”的軟件現(xiàn)在被劃入“客戶端應(yīng)用程序”類別。具體來講,如果應(yīng)用程序只負(fù)責(zé)在用戶與服務(wù)器交互時提供 UI,那它就屬于客戶端應(yīng)用程序。“桌面”這個概念現(xiàn)在指的就是那些以某種方式與本機(jī)設(shè)備相集成的應(yīng)用程序,包括訪問文件系統(tǒng)(開發(fā)工具、文件轉(zhuǎn)換工具等)、調(diào)用瀏覽器中不存在的某些平臺本機(jī) API、以及執(zhí)行算力密集型任務(wù)的軟件。
這倒不是說“客戶端”應(yīng)用程序跟“桌面”應(yīng)用程序間就毫無交集——當(dāng)然有,這兩者都涉及 GUI,而且不少現(xiàn)代桌面應(yīng)用程序也都需要接入服務(wù)器。所以無論是桌面還是客戶端應(yīng)用程序,都能享受到 GUI 工具包改進(jìn)、媒體(音頻 / 視頻)及網(wǎng)絡(luò)等技術(shù)層面的改進(jìn)成果。
Java 桌面的新征程
2004 年,我曾在 Mac 和 Windows 上都開發(fā)出一些商用級別的 Java 桌面應(yīng)用程序。HTML5 對這類應(yīng)用程序基本沒有任何直接影響。結(jié)合自身需求,Swing 還是完全夠用,我用來構(gòu)建本機(jī)捆綁包的各種桌面部署工具也都能正常起效。
但很遺憾,科技行業(yè)就是個不進(jìn)則退的世界。在接下來的幾年中,Web 平臺一路突飛猛進(jìn)、而 Swing 卻始終停滯不前。到 2007 年,Swing 已經(jīng)到了不變革、就消亡的危難關(guān)頭。它需要響應(yīng) HTML5 這波歷史性潮流,而最終答案就是 JavaFX。這是一種新奇的 Java UI 工具包,能夠把 Java 帶入 GPU 加速、場景圖、3D 圖形、Web 視圖的現(xiàn)代新世界,同時支持 MP3 和 MP4 等現(xiàn)代音視頻編解碼器。
在下一篇文章中,我們將回顧 JavaFX 的火爆人氣、深遠(yuǎn)影響,以及 2011 年 Mac 應(yīng)用商店出現(xiàn)前 Java 領(lǐng)域的其他發(fā)展趨勢。別小瞧 Mac 應(yīng)用商店,它的出現(xiàn)堪稱對 Java for Mac 桌面開發(fā)生態(tài)的“斬首行動”。
(感興趣的朋友可以多留言,InfoQ 將根據(jù)大家的需求繼續(xù)翻譯系列文章,以饗讀者)
原文鏈接:
https://jdeploy.substack.com/p/the-decline-and-fall-of-java-on-the-970
未來智能實(shí)驗(yàn)室的主要工作包括:建立AI智能系統(tǒng)智商評測體系,開展世界人工智能智商評測;開展互聯(lián)網(wǎng)(城市)大腦研究計(jì)劃,構(gòu)建互聯(lián)網(wǎng)(城市)大腦技術(shù)和企業(yè)圖譜,為提升企業(yè),行業(yè)與城市的智能水平服務(wù)。每日推薦范圍未來科技發(fā)展趨勢的學(xué)習(xí)型文章。目前線上平臺已收藏上千篇精華前沿科技文章和報(bào)告。
??如果您對實(shí)驗(yàn)室的研究感興趣,歡迎加入未來智能實(shí)驗(yàn)室線上平臺。掃描以下二維碼或點(diǎn)擊本文左下角“閱讀原文”
總結(jié)
以上是生活随笔為你收集整理的HTML5崛起之时,Java桌面时代就已经终结了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2知识图谱的生命周期
- 下一篇: JSP和HTML中实现字符串换行