關於HTML5的11個讓人難以接受的事實

發表於2012-01-01

英文:11 hard truths about HTML5,編譯:WebAppTrend

HTML5Web開發者提供了很多強大的新特性,但是它的一些特定的限制會讓它無法和本地應用匹敵。

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應用公司需要升級的時候,他們會將所有人一次性升級。儘管這據說是為了讓使用者不再受升級安裝檔案之苦,但對於那些不想使用新特性的人來說,這確是一場噩夢。這不像上面是一個關於人們隱私的問題。新軟體可能因為新舊軟體包之間的依賴關係而經常崩潰。

事實7Web 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引入了<audio>和<video> 標籤,第一眼看上去,它們和影像標籤一樣好用。只要在其中加入一個URL,瀏覽器就會引入資料流。然而,如果它真有這麼簡單的話,為什麼我浪費了兩個星期來讓所有主要的瀏覽器可以播放基本的音訊檔案呢?

個別瀏覽器構建者只實現了部分而不是全部的音訊視訊格式確實不是HTML5委員會的錯。大家都是人,都想要爭奪統治權。往往在一個瀏覽器上工作正常的檔案到了另外一個瀏覽器上卻不能工作了。開發者要如何測試這一點呢?API開發者非常聰明,他們加入了canPlayType函式,但就是這個函式也不是所有瀏覽器都支援的。

事實9:各瀏覽器的實現是獨立的

HTML5的田園詩般的願景是一回事,其實現的蹩腳的現實是另一回事。誠然,程式設計師正在盡他們最大努力來實現架構師的夢想,但就是有一些標籤和物件無法正常工作。

例如,有很多理由去喜歡HTML5的地理定位API。它提供了對隱私的一定程度的包含,對精確度也有控制。要是它能一直一貫地工作該有多好——有的瀏覽器就會總是超時,這個瀏覽器還是不太聰明,因為它應該知道桌上型電腦上是沒有GPS晶片的。

最後,人們會去抱怨瀏覽器沒有完全實現HTML5的特性,而不是去責備API本身的結構問題。這一事實凸顯了Web開發者在開發基於HTML5的Web應用時所面臨的挑戰。

事實10硬體idiosyncracies帶來新的挑戰

抱怨某些瀏覽器構建者超出了職責要求而提供更好的效能表現似乎也不公平,但這並非是恩將仇報。一個法拉利擁有者在繞過了一個燈杆以後,他就會發現有時候額外的動力並非總是好事。

Microsof通過將IE和低端硬體驅動整合而提升了IE瀏覽器中畫布物件(Canvas object)的效能。它甚至做了一些遊戲比如pirateslovedaisies.com來顯示其效能。

但現在程式設計師們需要注意這些附加功能是否能夠實現,並且這些程式碼的執行速度也是無法保證的。

例如,pirateslovedaisies.com的遊戲設計者設計了一個開關來開啟或者關閉IE支援的特性。但是,有沒有一個API來告訴你這些特性是什麼呢?沒有。最簡單的方式是通過瀏覽器名字來進行測試並估算幀速率。很多遊戲開發者都有多年經驗來了解可用硬體的範圍,唯一的解決方法就是禁止創新,但這將是Web開發者又要解決的一個新的問題。

事實11:政治一直都存在

有個叫Ian Hickson的人,是HTML5標準的主要起草者,也是生命的最高獨裁者(the Supreme Dictator for Life)。我想他們這是在開玩笑,因為這樣的頭銜實在太不匹配了。標準的編寫者只是在提出建議,瀏覽器公司的編碼天才們才是最終做出決定的人。他們可以選擇實現或者不實習某個特性,然後Web開發者就要去測試結果是否穩定。幾年以後,標準就會根據與實現程度的匹配情況做出改變。

很多Javascript開發者將相容性問題都留給了開發程式碼庫的人,比如jQuery。這些層讓我們不必去了解不同瀏覽器之間的差別。但是,這些程式碼在將來是否足夠健壯?只有時間才會知道。

這個議題凸顯了這個領域中最根本的問題。我們想要自由、創造性以及因為瀏覽器間的激烈競爭而產生的豐富特性。創新的腳步非常快,但是因為瀏覽器開發者都爭相新增新的特性以贏得先機,使得各個瀏覽器之間有更多的不同。

但我們希望能有一個統一的指揮者這樣就能獲得穩定性。但是,對於獨裁和自治間的爭鬥,從來都沒有一個理想的解決方式。與其為這些差異頭疼,我們或許想要聽聽Winston Churchill對下議院所說的話:“事實上,民主是一種最糟糕的政府形式,除非其他的形式都經過了一次又一次的試驗。”

 

相關文章