HTML5為Web開發者提供了很多強大的新特性,但是它的一些特定的限制會讓它無法和本地應用匹敵。
HTML5整合進了很多新的特性,並且有可能提升Web編程模式。和每一個閱讀技術資訊的人所知道的一樣,沒有任何一樣東西能像HTML5對互聯網造成更多改變。在代碼中加入一些HTML5,網站會變得更快更炫。但是HTML5能為那些想要要網絡上實現本地應用表現的人做什麼可能不在此列了。
在享受了HTML5的新標簽以及APIs之後,現在已經是時機來承認HTML5模式確實是有一些限制的。這些限制不但會讓我們對HTML5的幻夢破滅,還有可能讓我們在某些場合不再使用HTML5。
事實上是,盡管HTML5確實有很強大的功能,但它並不能解決所有問題。它的一些附加功能是非常強大的,能讓Web apps成為native app的強有力的對手,但是安全問題、本地數據存儲的限制、同步問題以及政治問題都會讓我們減小對它的期望。畢竟,任何技術都是有其限制的。
下面是Web開發者需要接受的一些關於HTML5的事實。
事實1:安全是一場噩夢
客戶端計算最根本的問題是用戶最終擁有了對機器上運行的代碼的控制權。在Web apps中,當浏覽器擁有一個很強大的調試工具的時候,這種控制權比以往更容易被濫用。
當在浏覽器中集成了一個Javascript的調試器比如Firebug,任何對Facebook、Google以及其他網站感興趣的人都可以插入斷點來查看代碼。這對於了解網站是如何運行的是非常有利的,但對於安全問題來說卻是一場噩夢。
想象有個變量的值是你想要改變的,Firebug或者其他一個浏覽器調試器可以讓你很容易地將數據改成你想要的任何數據。你想要通過改變你的地理位置來捉弄一下你的朋友嗎?那麼你可以修改浏覽器中的進度和維度變量,讓浏覽器“處於”世界上的任何位置。所有你的Web應用的neat features都可以被修改,浏覽器使得這樣的修改比在本地應用中更為容易。
對於引發的安全問題,也是有些限制的。一些Javascript工具比如Google Web Toolkit和標准的編譯器一樣復雜,它們的輸出是非常令人費解的。但是一些工具比如JavaScript Deminifier能解決這個問題。
威脅當然也跟應用性質有關。一個人通過改變浏覽器上顯示的經緯度來和朋友開玩笑說在環游世界的途中是一回事,而獲得其他人的權限又是另外一回事了,這會帶來威脅。一旦涉及到金錢,情況會更糟糕。所有這些都意味著基於客戶端的HTML5是不能用來處理敏感數據的,每個人都應該對自己的能力加以警醒。
事實2:本地數據存儲是有限制的
浏覽器中隱藏的本地數據庫讓Web應用更容易在電腦上緩存數據。對任何一個在浏覽器中享受這種台式機體驗的人來說,這些數據庫可以節省帶寬,提升性能。然而它們肯定比不上本地應用的數據的強大功能。
HTML5的數據存儲能力毫無疑問是很重要的功能,但是你仍然不能將存儲的數據遷移到另外一台機器上,或是制作副本、備份、用另外一個應用打開。所有這些數據都是隱藏在浏覽器之下的。
某種程度上說,這是最糟糕的一種情況。因為你要承擔存儲這些數據庫的所有責任而不能對它有任何控制。
一些最新的浏覽器可以讓你看到在你的機器上創建了哪些數據庫,但這些信息是有限的。Safari甚至可以讓你能夠刪除數據庫,但是你不能浏覽這些信息或是將它們遷移到另外一台機器上,這些文件在設計之初就沒有讓它能夠很容易遷移,盡管你可以做到這一點,如果你知道到哪裡找這些文件的話。
你同樣不能深入到文件中看到底存儲了什麼。當然,一個程序員可以看懂這些文件,但前提是他們研究清楚了文件格式並且做一些hacking。這些文件不像表單或者文本可以很容易地榮任何編輯器打開,使得它們不像本地應用那樣容易被人們讀懂。
事實3:本地數據可以被操縱
用戶可能並不擁有對數據的控制權,但是網站同樣也被限制不能處理用戶數據。用戶換浏覽器了?用戶換機器了?很多Web開發者對此都無能為力。因為同步問題,他們不能讓用戶創建更多數據。
Web開發者也需要擔心本地數據庫的安全。盡管沒有工具可以讓用戶可以很容易修改本地數據並升級權限,但服務器同樣也沒有能力去阻止用戶做到。所有因為運行用戶修改Javascript代碼的安全漏洞同樣會影響數據庫。它們門戶大開,等著有人寫一個Greasemonkey腳本或一些本地代碼去更改數據。
事實4:離線數據對同步是一場噩夢
HTML5的本地數據存儲極大提升了離線使用Web應用的能力。唯一的問題是數據同步。
如果一個Web應用連接到網絡上,它可以持續地將數據存儲到雲中去。而當應用離線時,應用中發生的數據就不能存儲到雲中。如果一個人切換了浏覽器或者使用了不同的機器,就會出現副本,這時同步就會成為一個大問題。更糟糕的是,時鐘本身就可能是不同步的,使得發現最新被保存的數據是不現實的。
當然,這對本地應用來說也一直都是一個問題,但是在本地應用中,為同步負責的是人,他可以通過查看文件名並改變日期來進行同步。但是因為HTML5並沒有給用戶對隱藏在浏覽器之下的數據庫的控制權,開發者必須提供用戶界面讓用戶通過這個界面來管理同步問題。
這並非是一個完全棘手的問題。開發人員可以通過使用版本控制系統來處理這個問題,而現今的版本控制系統在處理這些問題上已經變得越發復雜了。但擁有這項技術並不意味著這是一個很容易使用的解決方案。合並不同GIT庫是件很費時間的事情。HTML5開發者們需要先處理好這些問題,才能管理HTML5 Web應用的同步。
事實5:雲端什麼都沒有向你承諾:
為HTML5將數據存儲在雲端而帶來的所有結構性的問題來責備HTML5實際上不是件很公平的事情,但雲端是一個必須的部分,因為雲省去了安裝軟件和備份數據的麻煩。
由於HTML5本地數據存儲的限制,大量Web應用存儲仍然要保留在服務器端,但這可能是災難性的。就在最近Facebook決定將不再使用一個基於Linux的插件來上傳照片,結果,這個插件去掉的,同樣被去掉的是通過這個插件上傳的照片。
這樣的例子比較少見,但是因為各種原因,它們正變得越來越多。你能確保那個可愛地免費提供他們的一切HTML5應用的新興公司在幾年後甚至幾個月後還存在嗎?你只能自求多福。
情況還更糟糕。正如很多Web應用所明確說明的那樣,這些數據並不是你的,在大數情形下,你不能訴諸法律來恢復數據。有些更離譜的服務條款甚至說數據可以“沒有任何原因”就被刪除。
HTML5不僅沒有避免這個問題,它的結構實際上是保證了任何由你的浏覽器緩存的數據都會存儲在雲端,這些數據是脫離了你的控制的。HTML5的炒作說這是它的一個優勢特性,但這實際上卻很容易造成不利影響。
事實6:強制升級並非是每個人都想要的
有個故事,或許是杜撰的,說一個人使用Gmail賬戶和酒吧裡認識的人保持著隨意的聯系。當Google+出現以後,所有的歷史記錄都出現了,因為Google+在論壇裡自動連上了那些舊的地址。每天,這些舊名字和舊面孔都會出現詢問是否要加入到論壇中去。
當Web應用公司需要升級的時候,他們會將所有人一次性升級。盡管這據說是為了讓用戶不再受升級安裝文件之苦,但對於那些不想使用新特性的人來說,這確是一場噩夢。這不像上面是一個關於人們隱私的問題。新軟件可能因為新舊軟件包之間的依賴關系而經常崩潰。
事實7:Web Workers並不會處理優先級
Web Workers(譯者注:一種新的 JavaScript 編程模型)是HTML5的一個非常耐人尋味的特性。與其去使用Javascript傳統的wait、delay和pause命令,現在Web開發者可以拆分他們的命令並且整合到Web Workers的CPU hogs中。換句話說,HTML5 Web開發者可以讓浏覽器表現得像操作系統一樣。
但問題在於,Web Workers並沒有復制操作系統的所有特性。盡管它提供了一種方式來講負載分支並分離,但是卻沒有方法來管理負載或是設置優先級。API只是讓消息傳入或者傳出Worker對象。這就是它做的一切了,剩下的都交給浏覽器了。
CPU豐富的應用比如code crackers會潛入流行網站的後台嗎?用戶被交給會周期性被竊取的網站了嗎?病毒已經附在一切有用的軟件上了,那麼攻破網站就只是時間問題了。而用戶面對這一切能做的很少,因為他們沒有辦法去監測或者跟蹤Worker objects做了什麼。電腦被重定向到指定網頁的時候只會越來越慢。
事實8:格式不兼容比比皆是
HTML5引入了和 標簽,第一眼看上去,它們和圖像標簽一樣好用。只要在其中加入一個URL,浏覽器就會引入數據流。然而,如果它真有這麼簡單的話,為什麼我浪費了兩個星期來讓所有主要的浏覽器可以播放基本的音頻文件呢?
個別浏覽器構建者只實現了部分而不是全部的音頻視頻格式確實不是HTML5委員會的錯。大家都是人,都想要爭奪統治權。往往在一個浏覽器上工作正常的文件到了另外一個浏覽器上卻不能工作了。開發者要如何測試這一點呢?API開發者非常聰明,他們加入了canPlayType函數,但就是這個函數也不是所有浏覽器都支持的