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對象。這就是它作的一切了,剩下的都交給瀏覽器了。
豐富的應用好比code crackers會潛入流行網站的後臺嗎?用戶被交給會週期性被竊取的網站了嗎?病毒已經附在一切有用的軟件上了,那麼攻破網站就只是時間問題了。而用戶面對這一切能作的不多,由於他們沒有辦法去監測或者跟蹤Worker objects作了什麼。電腦被重定向到指定網頁的時候只會愈來愈慢。
事實8:格式不兼容比比皆是
HTML5引入了<audio>和<video> 標籤,第一眼看上去,它們和圖像標籤同樣好用。只要在其中加入一個URL,瀏覽器就會引入數據流。然而,若是它真有這麼簡單的話,爲何我浪費了兩個星期來讓全部主要的瀏覽器能夠播放基本的音頻文件呢?
個別瀏覽器構建者只實現了部分而不是所有的音頻視頻格式確實不是HTML5委員會的錯。你們都是人,都想要爭奪統治權。每每在一個瀏覽器上工做正常的文件到了另一個瀏覽器上卻不能工做了。開發者要如何測試這一點呢?API開發者很是聰明,他們加入了canPlayType函數,但這個函數也不是全部瀏覽器都支持的。
事實9:各瀏覽器的實現是獨立的
HTML5田園詩般的願景是一回事,其蹩腳實現的現實是另外一回事。誠然,程序員正在盡他們最大努力來實現架構師的夢想,但就是有一些標籤和對象沒法正常工做。
例如,有不少理由去喜歡HTML5的地理定位API。它提供了對隱私的必定程度的包含,對精確度也有控制。要是它能一直一向地工做該有多好——有的瀏覽器就會老是超時,這個瀏覽器仍是不太聰明,由於它應該知道臺式機上是沒有GPS芯片的。
最後,人們會去抱怨瀏覽器沒有徹底實現HTML5的特性,而不是去責備API自己的結構問題。這一事實凸顯了Web開發者在開發基於HTML5的Web應用時所面臨的挑戰。
事實10:硬件idiosyncracies帶來新的挑戰
抱怨某些瀏覽器構建者超出了職責要求而提供更好的性能表現彷佛也不公平,但這並不是是恩將仇報。一個法拉利擁有者在繞過了一個燈杆之後,他就會發現有時候額外的動力並不是老是好事。
Microsoft經過將IE和低端硬件驅動整合而提高了IE瀏覽器中畫布對象(Canvas object)的性能。它甚至作了一些遊戲好比pirateslovedaisies.com來顯示其性能。
但如今程序員們須要注意這些附加功能是否可以實現,而且這些代碼的運行速度也是沒法保證的。
例如, pirateslovedaisies.com 的遊戲設計者設計了一個開關來開啓或者關閉IE支持的特性。可是,有沒有一個API來告訴你這些特性是什麼呢?沒有。最簡單的方式是經過瀏覽器名字來進行測試並估算幀速率。不少遊戲開發者都有多年經驗來了解可用硬件的範圍,惟一的解決方法就是禁止創新,但這將是Web開發者又要解決的一個新的問題。
事實11:競爭一直都存在
有個叫Ian Hickson的人,是HTML5標準的主要起草者,也是「生命的最高獨裁者(the Supreme Dictator for Life)」。我想他們這是在開玩笑,由於這樣的頭銜實在太不匹配了。標準的編寫者只是提出建議,瀏覽器公司的編碼天才們纔是最終作出決定的人。他們能夠選擇實現或者不實現某個特性,而後Web開發者就要去測試結果是否穩定。幾年之後,標準就會根據與實現程度的匹配狀況作出改變。
不少JavaScript開發者將兼容性問題都留給了開發代碼庫的人,好比jQuery。這些層讓咱們沒必要去了解不一樣瀏覽器之間的差異。可是,這些代碼在未來是否足夠健壯?只有時間纔會知道。
這個議題凸顯了這個領域中最根本的問題。咱們想要自由、創造性以及由於瀏覽器間的激烈競爭而產生的豐富特性。創新的腳步很是快,可是由於瀏覽器開發者都爭相添加新的特性以贏得先機,使得各個瀏覽器之間有更多的不一樣。
但咱們但願能有一個統一的指揮者這樣就能得到穩定性。可是,對於獨裁和自治間的爭鬥,歷來都沒有一個理想的解決方式。 javascript