關于HTML5特性的一些限制與討論
HTML5已經成為2011年度技術社區最熱門的詞匯之一,逐漸從理論走向實踐,并得到了社區的廣泛認可,在強大特性的背后,HTML5也面臨一些限制,最近引起了社區的討論。
InfoWorld網站最近發布了一篇文章《關 于HTML5的11個讓人難以接受的事實》,作者Peter Wayner指出:盡管HTML5確實有很強大的功能,但它并不能解決所有問題,一些功能是非常強大的,能讓Web應用成為原生應用的強有力對手,但是安 全問題、本地數據存儲的限制、同步以及“爭權奪利”等問題都會讓我們降低對它的期望。
對于此篇文章,HTML5研究小組成員秀野堂主在《我這一年所了解的HTML5》一文(以下簡稱“觀點”)中專門對這11個問題分別作了分析和討論,我們不妨將兩篇文章的觀點對比一下,對于HTML5技術圈里的開發人員會有所啟發。
問題1:安全是一場噩夢
……在Web應用中,當瀏覽器擁有一個很強大的調試工具的時候,這種控制權比以往更容易被濫用。當在瀏覽器中集成了一個Javascript的調試 器比如Firebug,任何對Facebook、Google以及其他網站感興趣的人?都可以插入斷點來查看代碼。這對于了解網站是如何運行的是非常有利 的,但對于安全問題來說卻是一場噩夢。想象有個變量的值是你想要改變的,Firebug或者其他一個瀏覽器調試器可以讓你很容易地將數據改成你想要的任何 數據。你想要通過改變自己的地理位置來捉弄一下你的朋友嗎?那么可以修改瀏覽器中的經度和緯度值,讓瀏覽器“處于”世界上的任何位置。很多配置屬性都可以 被修改,瀏覽器使得這樣的修改比在本地應用中更為容易。 對于引發的安全問題,也是有些限制的。一些Javascript工具比如Google Web Toolkit和標準的編譯器一樣復雜,它們的輸出令人費解。但是一些工具比如JavaScript Deminifier能解決這個問題。 威脅當然也跟應用性質有關。一個人通過改變瀏覽器上顯示的經緯度來和朋友開玩笑說在環游世界的途中是一回事,而獲得其他人的權限又是另外一回事了,這會帶來威脅。一旦涉及到金錢,情況會更糟糕……
觀點:
安全問題是全面存在的,不僅僅是斷點調試和變量。不過,好像到目前為止,大家都有安全問題,沒有誰是絕對安全的。因此,在一些不是很重視安全的項目上,安全問題可以降級。這完全由架構師來思考和決定。
?問題2:本地數據存儲存在限制
瀏覽器中隱藏的本地數據庫讓Web應用更容易在電腦上緩存數據。對任何一個在瀏覽器中享受這?種臺式機體驗的人來說,這些數據庫可以節省帶寬,提升 性能。然而它們肯定比不上本地應用的數據的強大功能。HTML5的數據存儲能力毫無疑問是很重要的功能,但是你仍然不能將存儲的數據遷移到另外一臺機器 上,或是制作副本、備份、用另外一個應用打開。所有這些數據都是隱藏在瀏覽器之下的。某種程度上說,這是最糟糕的一種情況。因為你要承擔存儲這些數據庫的 所有責任而不能對它有任何控制。 一些最新的瀏覽器可以讓你看到在你的機器上創建了哪些數據庫,但這些信息是有限的。Safari甚至可以讓你能夠刪除數據庫,但是你不能瀏覽這些信息或是 將它們遷移到另外一臺機器上,這些文件在設計之初就沒有讓它能夠很容易遷移。你同樣不能深入到文件中看到底存儲了什么。當然,一個程序員可以看懂這些文 件,但前提是他們研究清楚了文件格式并且做一些hacking…..
觀點:
本地數據存儲是有限制的,確實是,但是在不同的瀏覽器上,限制是不一樣的。因此架構師應該以支持最好的瀏覽器(ios上就是 safari,android上目前就是歐朋最新版)為準,推薦你的用戶去使用最好的軟件,而不是兼容那些垃圾軟件……因此,我的個人建議是:不要讓自己 的作品去適應當前的、一定會消失的問題,追求卓越,推薦卓越完全是應有的使命。在移動瀏覽器端,safari的表現就可能是最好的,存儲可能也是最大的。 (當然,鑒于行業的劇烈變化,這一切是會變的)
問題3:本地數據可以被操縱
用戶可能并不擁有對數據的控制權,但是網站同樣也被限制不能處理用戶數據。用戶換瀏覽器了?用戶換機器了?很多Web開發者對此都無能為力。因為同 步問題,他們不能讓用戶創建更多數據。Web開發者也需要擔心本地數據庫的安全。盡管沒有工具可以讓用戶可以很容易修改本地數據并升級權限,但服務器同樣 也沒有能力去阻止用戶做到。所有因為運行用戶修改Javascript代碼的安全漏洞同樣會影響數據庫。
觀點:
本地數據可以被操縱。這是一個老調重彈的問題,即:跨域問題。這已經是大家都很清楚,而且都已經解決的問題了,再說就沒有意思了。你可以去下載最新 的各種瀏覽器,為了跨域問題,整個html5標準中的重要api幾乎都翻新了一遍。以致于微軟抓著這個問題讓webGL、websocket、 webWorker都推遲了出來。
問題4:離線數據對同步是一場噩夢
?HTML5的本地數據存儲極大提升了離線使用Web應用的能力。唯一的問題是數據同步。 如果一個Web應用連接到網絡上,它可以持續地將數據存儲到云中去。而當應用離線時,應用中發生的數據就不能存儲到云中。如果一個人切換了瀏覽器或者使用 了不同的機器,就會出現副本,這時同步就會成為一個大問題。更糟糕的是,時鐘本身就可能是不同步的,使得檢查最新被保存的數據是不現實的。 當然,這對本地應用來說也一直都是一個問題,但是在本地應用中,為同步負責的是人,他可以通過查看文件名并改變日期來進行同步。但是因為HTML5并沒有 給用戶對隱藏在瀏覽器之下的數據庫的控制權,開發者必須提供用戶界面讓用戶通過這個界面來管理同步問題。 這并非是一個完全棘手的問題。開發人員可以通過使用版本控制系統來處理這個問題,而現今的版本控制系統在處理這些問題上已經變得越發復雜了。
觀點:
離線對同步是一場噩夢。這話一點不假,確實,我們在做applicationCache時,都滿懷心喜,結果碰了一鼻子的灰。其實,我們還要警告開 發者,在移動設備上,大多數的瀏覽器,都不能良好的支持,其原因也很簡單,因為大多數瀏覽器廠商都還生活在狹窄寬帶的時代。他們的產品設計都不足2M。因 此,在一段時間內,在移動設備上,不用applicationCache比用要妥當。但是在桌面瀏覽器上,用applicationCache是很好的選 擇,所謂的版本控制,可以隨意些,用時間戳就是一個不錯的選擇。
問題5:云端什么都沒有向你承諾
為HTML5將數據存儲在云端而帶來的所有結構性的問題來責備HTML5實際上不是件很公平的事情,但云端是一個必要的部分,因為云省去了安裝軟件 和備份數據的麻煩。由于HTML5本地數據存儲的限制,大量Web應用存儲仍然要保留在服務器端,但這可能是災難性的。就在最近Facebook決定將不 再使用一個基于Linux的插件來上傳照片,結果,同樣被去掉的是通過這個插件上傳的照片。這樣的例子比較少見,但是因為各種原因,它們正變得越來越多。 你能確保那個免費提供他們的一切HTML5應用的新興公司在幾年后甚至幾個月后還存在嗎?你只能自求多福。情況還更糟糕。正如很多Web應用所明確說明的 那樣,這些數據并不是你的,在大數情形下,你不能訴諸法律來恢復數據。有些更離譜的服務條款甚至說數據可以“沒有任何理由”就被刪除。HTML5沒有避免 這個問題,它的結構實際上是保證了任何由你的瀏覽器緩存的數據都會存儲在云端,這些數據是脫離了你的控制的。HTML5的炒作說這是它的一個優勢特性,但 這實際上卻很容易造成不利影響。
觀點:
關于云的問題,這似乎是一個云存儲與本地存儲的問題,與HTML5的關系不太大。相反,HTML5如果與云服務器供應商結合起來,可以發揮較大的生產力。
問題6:強制升級并非是每個人都想要的
有個故事,或許是杜撰的,說一個人使用Gmail賬戶和酒吧里認識的人保持著隨意的聯系。當Google+出現以后,所有的歷史記錄都出現了,因為 Google+在論壇里自動連上了那些舊的地址。每天,這些舊名字和舊面孔都會出現詢問是否要加入到論壇中去。當Web應用公司需要升級的時候,他們會將 所有人一次性升級。盡管這據說是為了讓用戶不再受升級安裝文件之苦,但對于那些不想使用新特性的人來說,這確是一場噩夢。這不像上面是一個關于人們隱私的 問題。新軟件可能因為新舊軟件包之間的依賴關系而經常崩潰。
?觀點:
強制升級并非是每個人想要的,這點我是贊同的,但是這也不是技術問題,這是web與native的區別。引用的案例g+不適合在這里討論,但是我們 可以看到,新浪微博就有較好的新舊版本控制,我就一直用的舊版本,不喜歡新版本,一直用的挺好。這完全取決于技術人員,不是技術和標準本身。
問題7:Web Workers并不會處理優先級
Web Workers是HTML5的一個非常耐人尋味的特性。與其去使用Javascript傳統的wait、delay和pause命令,現在Web開發者可 以拆分他們的命令并且整合到Web Workers的CPU hogs中。換句話說,HTML5 Web開發者可以讓瀏覽器表現得像操作系統一樣。但問題在于,Web Workers并沒有復制操作系統的所有特性。盡管它提供了一種方式來講負載分支并分離,但是卻沒有方法來管理負載或是設置優先級。API只是讓消息傳入 或者傳出Worker對象。這就是它做的一切了,剩下的都交給瀏覽器了。
?觀點:
webWorker的問題確實還會有一堆,從標準上看webworker還在進化期,與serverEvent相比,webworker是另一種服 務器端的通信,這種優先級的處理,完全是在開發者來決定的,這沒什么問題。webWorker肯定是不成熟的,還需要時間。但是作者所說的問題,可能是看 了一眼標準后作出的臆想,可那已經不是問題了,webworker的根本問題,現在是父子進程的通信和子子進程的通信問題。
問題8:格式不兼容比比皆是
HTML5引入了<audio>和<video> 標簽,第一眼看上去,它們和圖像標簽一樣好用。只要在其中加入一個URL,瀏覽器就會引入數據流。然而,如果它真有這么簡單的話,為什么我浪費了兩個星期 來讓所有主要的瀏覽器可以播放基本的音頻文件呢?個別瀏覽器構建者只實現了部分而不是全部的音頻視頻格式確實不是HTML5委員會的錯。大家都是人,都想 要爭奪統治權。往往在一個瀏覽器上工作正常的文件到了另外一個瀏覽器上卻不能工作了。開發者要如何測試這一點呢?API開發者非常聰明,他們加入了 canPlayType函數,但就是這個函數也不是所有瀏覽器都支持的。
觀點:
格式不兼容是真實的存在的。這完全是廠商之爭和市場之爭。不過沒有關系,我們是這樣看待問題的:目前能夠支持好html5的瀏覽器本來就不多,因此,我們只需要迎合一部分人群即可。而那一部分人群用的設備就是主流……
問題9:各瀏覽器的實現是獨立的
HTML5的田園詩般的愿景是一回事,其實現的蹩腳的現實是另一回事。誠然,程序員正在盡他們最大努力來實現架構師的夢想,但就是有一些標簽和對象 無法正常工作。例如,有很多理由去喜歡HTML5的地理定位API。它提供了對隱私的一定程度的包含,對精確度也有控制。要是它能一直一貫地工作該有多好 ——有的瀏覽器就會總是超時,這個瀏覽器還是不太聰明,因為它應該知道臺式機上是沒有GPS芯片的。最后,人們會去抱怨瀏覽器沒有完全實現HTML5的特 性,而不是去責備API本身的結構問題。這一事實凸顯了Web開發者在開發基于HTML5的Web應用時所面臨的挑戰。
觀點:
這是肯定的。geolocation在不同的瀏覽器上實現是不一樣的。但是,瀏覽器是可以檢測出設備是否支持geolocation的,返回了false就對了。這與html5標準也不是大關系。是設備問題。而摩爾定律和統計是:12個月內,人們平均都換了手機了。
問題10:硬件特質帶來新的挑戰
抱怨某些瀏覽器構建者超出了職責要求而提供更好的性能表現似乎也不公平,但這并非是恩將仇報。Microsoft通過將IE和低端硬件驅動整合而提 升了IE瀏覽器中畫布對象(Canvas object)的性能。它甚至做了一些游戲比如pirateslovedaisies.com來顯示其性能。?但現在程序員們需要注意這些附加功能是否能 夠實現,并且這些代碼的運行速度也是無法保證的。例如,pirateslovedaisies.com的游戲設計者設計了一個開關來開啟或者關閉IE支持 的特性。但是,有沒有一個API來告訴你這些特性是什么呢?沒有。最簡單的方式是通過瀏覽器名字來進行測試并估算幀速率。很多游戲開發者都有多年經驗來了 解可用硬件的范圍,唯一的解決方法就是禁止創新,但這將是Web開發者又要解決的一個新的問題。
?觀點:
……這不用擔心啊。windows phone在中國不超過10萬臺。開發者的力量都集中在移動端,桌面端的進化受微軟影響,但是在移動設備中。微軟的影響是非常弱的。android和ios兩塊里,做好一塊,就是王了,何必管那么多?
問題11:“爭權奪利”一直都存在
有個叫Ian Hickson的人,是HTML5標準的主要起草者,也是最高獨裁者(the Supreme Dictator for Life)。我想他們這是在開玩笑,因為這樣的頭銜實在太不匹配了。標準的編寫者只是在提出建議,瀏覽器公司的編碼天才們才是最終做出決定的人。他們可以 選擇實現或者不實現某個特性,然后Web開發者就要去測試結果是否穩定。幾年以后,標準就會根據與實現程度的匹配情況做出改變。很多Javascript 開發者將兼容性問題都留給了開發代碼庫的人,比如jQuery。這些層讓我們不必去了解不同瀏覽器之間的差別。但是,這些代碼在將來是否足夠健壯?只有時 間才會知道。這個議題凸顯了這個領域中最根本的問題。我們想要自由、創造性以及因為瀏覽器間的激烈競爭而產生的豐富特性。創新的腳步非常快,但是因為瀏覽 器開發者都爭相添加新的特性以贏得先機,使得各個瀏覽器之間有更多的不同。但我們希望能有一個統一的指揮者這樣就能獲得穩定性。但是,對于爭斗,從來都沒 有一個理想的解決方式。
觀點:
一個偉大的事業,總是會有跌跌撞撞的。在項目中,無論我如何大罵HTML5的缺點,都無法阻擋我對HTML5深深的期盼。所謂的技術(爭權奪利), 我們不予考慮……移動互聯網已經有了很多泡沫,但是前景依然美好,那些正在創業的和已經創業的,請向移動互聯網看齊,這個盤子很大,沒有誰能一口吃下,快 來吧……在這里,我想說一句:這個世界上從不缺少CEO和老板,只缺少真正能解決問題的人。