關(guān)于HTML 5的11個(gè)讓人難以接受的事實(shí)
HTML5整合進(jìn)了很多新的特性,并且有可能提升Web編程模式。和每一個(gè)閱讀技術(shù)資訊的人所知道的一樣,沒有任何一樣?xùn)|西能像HTML5對(duì)互聯(lián)網(wǎng)造成更多改變。在代碼中加入一些HTML5,網(wǎng)站會(huì)變得更快更炫。但是HTML5能為那些想要要網(wǎng)絡(luò)上實(shí)現(xiàn)本地應(yīng)用表現(xiàn)的人做什么可能不在此列了。
在享受了HTML5的新標(biāo)簽以及APIs之后,現(xiàn)在已經(jīng)是時(shí)機(jī)來承認(rèn)HTML5模式確實(shí)是有一些限制的。這些限制不但會(huì)讓我們對(duì)HTML5的幻夢(mèng)破滅,還有可能讓我們?cè)谀承﹫龊喜辉偈褂肏TML5。
事實(shí)上是,盡管HTML5確實(shí)有很強(qiáng)大的功能,但它并不能解決所有問題。它的一些附加功能是非常強(qiáng)大的,能讓W(xué)eb apps成為native app的強(qiáng)有力的對(duì)手,但是安全問題、本地?cái)?shù)據(jù)存儲(chǔ)的限制、同步問題以及政治問題都會(huì)讓我們減小對(duì)它的期望。畢竟,任何技術(shù)都是有其限制的。
下面是Web開發(fā)者需要接受的一些關(guān)于HTML5的事實(shí)。
事實(shí)1:安全是一場噩夢(mèng)
客戶端計(jì)算最根本的問題是用戶最終擁有了對(duì)機(jī)器上運(yùn)行的代碼的控制權(quán)。在Web apps中,當(dāng)瀏覽器擁有一個(gè)很強(qiáng)大的調(diào)試工具的時(shí)候,這種控制權(quán)比以往更容易被濫用。
當(dāng)在瀏覽器中集成了一個(gè)Javascript的調(diào)試器比如Firebug,任何對(duì)Facebook、Google以及其他網(wǎng)站感興趣的人都可以插入斷點(diǎn)來查看代碼。這對(duì)于了解網(wǎng)站是如何運(yùn)行的是非常有利的,但對(duì)于安全問題來說卻是一場噩夢(mèng)。
想象有個(gè)變量的值是你想要改變的,F(xiàn)irebug或者其他一個(gè)瀏覽器調(diào)試器可以讓你很容易地將數(shù)據(jù)改成你想要的任何數(shù)據(jù)。你想要通過改變你的地理位置來捉弄一下你的朋友嗎?那么你可以修改瀏覽器中的進(jìn)度和維度變量,讓瀏覽器“處于”世界上的任何位置。所有你的Web應(yīng)用的neat features都可以被修改,瀏覽器使得這樣的修改比在本地應(yīng)用中更為容易。
對(duì)于引發(fā)的安全問題,也是有些限制的。一些Javascript工具比如Google Web Toolkit和標(biāo)準(zhǔn)的編譯器一樣復(fù)雜,它們的輸出是非常令人費(fèi)解的。但是一些工具比如JavaScript Deminifier能解決這個(gè)問題。
威脅當(dāng)然也跟應(yīng)用性質(zhì)有關(guān)。一個(gè)人通過改變?yōu)g覽器上顯示的經(jīng)緯度來和朋友開玩笑說在環(huán)游世界的途中是一回事,而獲得其他人的權(quán)限又是另外一回事了,這會(huì)帶來威脅。一旦涉及到金錢,情況會(huì)更糟糕。所有這些都意味著基于客戶端的HTML5是不能用來處理敏感數(shù)據(jù)的,每個(gè)人都應(yīng)該對(duì)自己的能力加以警醒。
事實(shí)2:本地?cái)?shù)據(jù)存儲(chǔ)是有限制的
瀏覽器中隱藏的本地?cái)?shù)據(jù)庫讓W(xué)eb應(yīng)用更容易在電腦上緩存數(shù)據(jù)。對(duì)任何一個(gè)在瀏覽器中享受這種臺(tái)式機(jī)體驗(yàn)的人來說,這些數(shù)據(jù)庫可以節(jié)省帶寬,提升性能。然而它們肯定比不上本地應(yīng)用的數(shù)據(jù)的強(qiáng)大功能。
HTML5的數(shù)據(jù)存儲(chǔ)能力毫無疑問是很重要的功能,但是你仍然不能將存儲(chǔ)的數(shù)據(jù)遷移到另外一臺(tái)機(jī)器上,或是制作副本、備份、用另外一個(gè)應(yīng)用打開。所有這些數(shù)據(jù)都是隱藏在瀏覽器之下的。
某種程度上說,這是最糟糕的一種情況。因?yàn)槟阋袚?dān)存儲(chǔ)這些數(shù)據(jù)庫的所有責(zé)任而不能對(duì)它有任何控制。
一些最新的瀏覽器可以讓你看到在你的機(jī)器上創(chuàng)建了哪些數(shù)據(jù)庫,但這些信息是有限的。Safari甚至可以讓你能夠刪除數(shù)據(jù)庫,但是你不能瀏覽這些信息或是將它們遷移到另外一臺(tái)機(jī)器上,這些文件在設(shè)計(jì)之初就沒有讓它能夠很容易遷移,盡管你可以做到這一點(diǎn),如果你知道到哪里找這些文件的話。
你同樣不能深入到文件中看到底存儲(chǔ)了什么。當(dāng)然,一個(gè)程序員可以看懂這些文件,但前提是他們研究清楚了文件格式并且做一些hacking。這些文件不像表單或者文本可以很容易地榮任何編輯器打開,使得它們不像本地應(yīng)用那樣容易被人們讀懂。
事實(shí)3:本地?cái)?shù)據(jù)可以被操縱
用戶可能并不擁有對(duì)數(shù)據(jù)的控制權(quán),但是網(wǎng)站同樣也被限制不能處理用戶數(shù)據(jù)。用戶換瀏覽器了?用戶換機(jī)器了?很多Web開發(fā)者對(duì)此都無能為力。因?yàn)橥絾栴},他們不能讓用戶創(chuàng)建更多數(shù)據(jù)。
Web開發(fā)者也需要擔(dān)心本地?cái)?shù)據(jù)庫的安全。盡管沒有工具可以讓用戶可以很容易修改本地?cái)?shù)據(jù)并升級(jí)權(quán)限,但服務(wù)器同樣也沒有能力去阻止用戶做到。所有因?yàn)檫\(yùn)行用戶修改Javascript代碼的安全漏洞同樣會(huì)影響數(shù)據(jù)庫。它們門戶大開,等著有人寫一個(gè)Greasemonkey腳本或一些本地代碼去更改數(shù)據(jù)。
事實(shí)4:離線數(shù)據(jù)對(duì)同步是一場噩夢(mèng)
HTML5的本地?cái)?shù)據(jù)存儲(chǔ)極大提升了離線使用Web應(yīng)用的能力。唯一的問題是數(shù)據(jù)同步。
如果一個(gè)Web應(yīng)用連接到網(wǎng)絡(luò)上,它可以持續(xù)地將數(shù)據(jù)存儲(chǔ)到云中去。而當(dāng)應(yīng)用離線時(shí),應(yīng)用中發(fā)生的數(shù)據(jù)就不能存儲(chǔ)到云中。如果一個(gè)人切換了瀏覽器或者使用了不同的機(jī)器,就會(huì)出現(xiàn)副本,這時(shí)同步就會(huì)成為一個(gè)大問題。更糟糕的是,時(shí)鐘本身就可能是不同步的,使得發(fā)現(xiàn)最新被保存的數(shù)據(jù)是不現(xiàn)實(shí)的。
當(dāng)然,這對(duì)本地應(yīng)用來說也一直都是一個(gè)問題,但是在本地應(yīng)用中,為同步負(fù)責(zé)的是人,他可以通過查看文件名并改變?nèi)掌趤磉M(jìn)行同步。但是因?yàn)镠TML5并沒有給用戶對(duì)隱藏在瀏覽器之下的數(shù)據(jù)庫的控制權(quán),開發(fā)者必須提供用戶界面讓用戶通過這個(gè)界面來管理同步問題。
這并非是一個(gè)完全棘手的問題。開發(fā)人員可以通過使用版本控制系統(tǒng)來處理這個(gè)問題,而現(xiàn)今的版本控制系統(tǒng)在處理這些問題上已經(jīng)變得越發(fā)復(fù)雜了。但擁有這項(xiàng)技術(shù)并不意味著這是一個(gè)很容易使用的解決方案。合并不同GIT庫是件很費(fèi)時(shí)間的事情。HTML5開發(fā)者們需要先處理好這些問題,才能管理HTML5 Web應(yīng)用的同步。
事實(shí)5:云端什么都沒有向你承諾
為HTML5將數(shù)據(jù)存儲(chǔ)在云端而帶來的所有結(jié)構(gòu)性的問題來責(zé)備HTML5實(shí)際上不是件很公平的事情,但云端是一個(gè)必須的部分,因?yàn)樵剖∪チ税惭b軟件和備份數(shù)據(jù)的麻煩。
由于HTML5本地?cái)?shù)據(jù)存儲(chǔ)的限制,大量Web應(yīng)用存儲(chǔ)仍然要保留在服務(wù)器端,但這可能是災(zāi)難性的。就在最近Facebook決定將不再使用一個(gè)基于Linux的插件來上傳照片,結(jié)果,這個(gè)插件去掉的,同樣被去掉的是通過這個(gè)插件上傳的照片。
這樣的例子比較少見,但是因?yàn)楦鞣N原因,它們正變得越來越多。你能確保那個(gè)可愛地免費(fèi)提供他們的一切HTML5應(yīng)用的新興公司在幾年后甚至幾個(gè)月后還存在嗎?你只能自求多福。
情況還更糟糕。正如很多Web應(yīng)用所明確說明的那樣,這些數(shù)據(jù)并不是你的,在大數(shù)情形下,你不能訴諸法律來恢復(fù)數(shù)據(jù)。有些更離譜的服務(wù)條款甚至說數(shù)據(jù)可以“沒有任何原因”就被刪除。
HTML5不僅沒有避免這個(gè)問題,它的結(jié)構(gòu)實(shí)際上是保證了任何由你的瀏覽器緩存的數(shù)據(jù)都會(huì)存儲(chǔ)在云端,這些數(shù)據(jù)是脫離了你的控制的。HTML5的炒作說這是它的一個(gè)優(yōu)勢(shì)特性,但這實(shí)際上卻很容易造成不利影響。
事實(shí)6:強(qiáng)制升級(jí)并非是每個(gè)人都想要的
有個(gè)故事,或許是杜撰的,說一個(gè)人使用Gmail賬戶和酒吧里認(rèn)識(shí)的人保持著隨意的聯(lián)系。當(dāng)Google+出現(xiàn)以后,所有的歷史記錄都出現(xiàn)了,因?yàn)镚oogle+在論壇里自動(dòng)連上了那些舊的地址。每天,這些舊名字和舊面孔都會(huì)出現(xiàn)詢問是否要加入到論壇中去。
當(dāng)Web應(yīng)用公司需要升級(jí)的時(shí)候,他們會(huì)將所有人一次性升級(jí)。盡管這據(jù)說是為了讓用戶不再受升級(jí)安裝文件之苦,但對(duì)于那些不想使用新特性的人來說,這確是一場噩夢(mèng)。這不像上面是一個(gè)關(guān)于人們隱私的問題。新軟件可能因?yàn)樾屡f軟件包之間的依賴關(guān)系而經(jīng)常崩潰。
#p#
事實(shí)7:Web Workers并不會(huì)處理優(yōu)先級(jí)
Web Workers(譯者注:一種新的 JavaScript 編程模型)是HTML5的一個(gè)非常耐人尋味的特性。與其去使用Javascript傳統(tǒng)的wait、delay和pause命令,現(xiàn)在Web開發(fā)者可以拆分他們的命令并且整合到Web Workers的CPU hogs中。換句話說,HTML5 Web開發(fā)者可以讓瀏覽器表現(xiàn)得像操作系統(tǒng)一樣。
但問題在于,Web Workers并沒有復(fù)制操作系統(tǒng)的所有特性。盡管它提供了一種方式來講負(fù)載分支并分離,但是卻沒有方法來管理負(fù)載或是設(shè)置優(yōu)先級(jí)。API只是讓消息傳入或者傳出Worker對(duì)象。這就是它做的一切了,剩下的都交給瀏覽器了。
CPU豐富的應(yīng)用比如code crackers會(huì)潛入流行網(wǎng)站的后臺(tái)嗎?用戶被交給會(huì)周期性被竊取的網(wǎng)站了嗎?病毒已經(jīng)附在一切有用的軟件上了,那么攻破網(wǎng)站就只是時(shí)間問題了。而用戶面對(duì)這一切能做的很少,因?yàn)樗麄儧]有辦法去監(jiān)測或者跟蹤Worker objects做了什么。電腦被重定向到指定網(wǎng)頁的時(shí)候只會(huì)越來越慢。
事實(shí)8:格式不兼容比比皆是
HTML5引入了<audio>和<video> 標(biāo)簽,第一眼看上去,它們和圖像標(biāo)簽一樣好用。只要在其中加入一個(gè)URL,瀏覽器就會(huì)引入數(shù)據(jù)流。然而,如果它真有這么簡單的話,為什么我浪費(fèi)了兩個(gè)星期來讓所有主要的瀏覽器可以播放基本的音頻文件呢?
個(gè)別瀏覽器構(gòu)建者只實(shí)現(xiàn)了部分而不是全部的音頻視頻格式確實(shí)不是HTML5委員會(huì)的錯(cuò)。大家都是人,都想要爭奪統(tǒng)治權(quán)。往往在一個(gè)瀏覽器上工作正常的文件到了另外一個(gè)瀏覽器上卻不能工作了。開發(fā)者要如何測試這一點(diǎn)呢?API開發(fā)者非常聰明,他們加入了canPlayType函數(shù),但就是這個(gè)函數(shù)也不是所有瀏覽器都支持的。
事實(shí)9:各瀏覽器的實(shí)現(xiàn)是獨(dú)立的
HTML5的田園詩般的愿景是一回事,其實(shí)現(xiàn)的蹩腳的現(xiàn)實(shí)是另一回事。誠然,程序員正在盡他們最大努力來實(shí)現(xiàn)架構(gòu)師的夢(mèng)想,但就是有一些標(biāo)簽和對(duì)象無法正常工作。
例如,有很多理由去喜歡HTML5的地理定位API。它提供了對(duì)隱私的一定程度的包含,對(duì)精確度也有控制。要是它能一直一貫地工作該有多好——有的瀏覽器就會(huì)總是超時(shí),這個(gè)瀏覽器還是不太聰明,因?yàn)樗鼞?yīng)該知道臺(tái)式機(jī)上是沒有GPS芯片的。
最后,人們會(huì)去抱怨瀏覽器沒有完全實(shí)現(xiàn)HTML5的特性,而不是去責(zé)備API本身的結(jié)構(gòu)問題。這一事實(shí)凸顯了Web開發(fā)者在開發(fā)基于HTML5的Web應(yīng)用時(shí)所面臨的挑戰(zhàn)。
事實(shí)10:硬件idiosyncracies帶來新的挑戰(zhàn)
抱怨某些瀏覽器構(gòu)建者超出了職責(zé)要求而提供更好的性能表現(xiàn)似乎也不公平,但這并非是恩將仇報(bào)。一個(gè)法拉利擁有者在繞過了一個(gè)燈桿以后,他就會(huì)發(fā)現(xiàn)有時(shí)候額外的動(dòng)力并非總是好事。
Microsof通過將IE和低端硬件驅(qū)動(dòng)整合而提升了IE瀏覽器中畫布對(duì)象(Canvas object)的性能。它甚至做了一些游戲比如pirateslovedaisies.com來顯示其性能。
但現(xiàn)在程序員們需要注意這些附加功能是否能夠?qū)崿F(xiàn),并且這些代碼的運(yùn)行速度也是無法保證的。
例如,pirateslovedaisies.com的游戲設(shè)計(jì)者設(shè)計(jì)了一個(gè)開關(guān)來開啟或者關(guān)閉IE支持的特性。但是,有沒有一個(gè)API來告訴你這些特性是什么呢?沒有。最簡單的方式是通過瀏覽器名字來進(jìn)行測試并估算幀速率。很多游戲開發(fā)者都有多年經(jīng)驗(yàn)來了解可用硬件的范圍,唯一的解決方法就是禁止創(chuàng)新,但這將是Web開發(fā)者又要解決的一個(gè)新的問題。
事實(shí)11:政治一直都存在
有個(gè)叫Ian Hickson的人,是HTML5標(biāo)準(zhǔn)的主要起草者,也是生命的最高獨(dú)裁者(the Supreme Dictator for Life)。我想他們這是在開玩笑,因?yàn)檫@樣的頭銜實(shí)在太不匹配了。標(biāo)準(zhǔn)的編寫者只是在提出建議,瀏覽器公司的編碼天才們才是最終做出決定的人。他們可以選擇實(shí)現(xiàn)或者不實(shí)習(xí)某個(gè)特性,然后Web開發(fā)者就要去測試結(jié)果是否穩(wěn)定。幾年以后,標(biāo)準(zhǔn)就會(huì)根據(jù)與實(shí)現(xiàn)程度的匹配情況做出改變。
很多Javascript開發(fā)者將兼容性問題都留給了開發(fā)代碼庫的人,比如jQuery。這些層讓我們不必去了解不同瀏覽器之間的差別。但是,這些代碼在將來是否足夠健壯?只有時(shí)間才會(huì)知道。
這個(gè)議題凸顯了這個(gè)領(lǐng)域中最根本的問題。我們想要自由、創(chuàng)造性以及因?yàn)闉g覽器間的激烈競爭而產(chǎn)生的豐富特性。創(chuàng)新的腳步非???,但是因?yàn)闉g覽器開發(fā)者都爭相添加新的特性以贏得先機(jī),使得各個(gè)瀏覽器之間有更多的不同。
但我們希望能有一個(gè)統(tǒng)一的指揮者這樣就能獲得穩(wěn)定性。但是,對(duì)于獨(dú)裁和自治間的爭斗,從來都沒有一個(gè)理想的解決方式。與其為這些差異頭疼,我們或許想要聽聽Winston Churchill對(duì)下議院所說的話:“事實(shí)上,民主是一種最糟糕的政府形式,除非其他的形式都經(jīng)過了一次又一次的試驗(yàn)。”
原文鏈接:11 hard truths about HTML5
譯文來源:http://www.webapptrend.com/
WebAppTrend是一個(gè)獨(dú)立的技術(shù)博客,關(guān)注Web App前瞻和實(shí)踐,以及智能瀏覽器發(fā)展@WebAppTrend
【編輯推薦】