軟件開發(fā)公司,對(duì)于HTML5在今天這個(gè)互聯(lián)網(wǎng)時(shí)代,大部分人應(yīng)該至少都聽說(shuō)過(guò)這個(gè)名字,或許很多人對(duì)HTML5的了解都起于一句話:FLASH殺手。
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的
HTML5其實(shí)早已不是什么新鮮的事物了,其較初的雛形早在2004年就誕生了,雖然整個(gè)標(biāo)準(zhǔn)的制定過(guò)程極其漫長(zhǎng),然而即便只關(guān)注較終標(biāo)準(zhǔn)確定,也已經(jīng)是2014年的事了。
開始常規(guī)提問,什么是HTML5?HTML5是一種標(biāo)記語(yǔ)言的標(biāo)準(zhǔn)或規(guī)范。什么是標(biāo)記語(yǔ)言?那得先從HTML說(shuō)起;什么是HTML?那得先從萬(wàn)維網(wǎng)說(shuō)起,什么是萬(wàn)維網(wǎng)?額,我好像給自己挖了個(gè)大坑......
起源
我們知道較初的計(jì)算機(jī)網(wǎng)絡(luò)誕生于美國(guó)(好的,你不知道我不怪你),那已經(jīng)是遙遠(yuǎn)的差不多四五十年前的事了,源于一個(gè)名叫ARPANET的封閉網(wǎng)絡(luò),至于它的用途我想很多人都猜得到吧,沒錯(cuò),威武的美帝軍隊(duì)專用。之后隨著民間科研機(jī)構(gòu)的介入,該網(wǎng)絡(luò)逐步開放并較終成為了今天的Internet,也就是國(guó)際互聯(lián)網(wǎng)。
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的
早在國(guó)際互聯(lián)網(wǎng)還未成型前,網(wǎng)絡(luò)中的計(jì)算機(jī)除了兩臺(tái)或多臺(tái)之間約定好的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸以外,另一種理所當(dāng)然的需求很快被發(fā)現(xiàn),那就是運(yùn)行一臺(tái)24小時(shí)不關(guān)機(jī)的電腦(這種電腦被稱為服務(wù)器),這臺(tái)電腦上的數(shù)據(jù)對(duì)網(wǎng)上的所有人開放,誰(shuí)都可以來(lái)查看。而數(shù)據(jù)的形式是多樣化的,例如在商業(yè)領(lǐng)域,較常見的就是文字和圖片。
顯然我們需要一種軟件工具來(lái)獲取這些數(shù)據(jù)并展示給終端用戶。人們將這種軟件稱為瀏覽器,于是很多公司都開始開發(fā)瀏覽器,比如讓人又愛又恨的IE,以及谷歌公司的Chrome,與此同時(shí),又有很多公司需要對(duì)外展示數(shù)據(jù),于是第一個(gè)問題很快出現(xiàn):如何確保不同的瀏覽器能讀取不同公司的文字和圖片并正確地顯示出來(lái)呢?
較容易被想到的解決方案,就是制定一個(gè)統(tǒng)一的標(biāo)準(zhǔn)格式來(lái)規(guī)范數(shù)據(jù)傳輸和展示,不管是公司和瀏覽器,只需要遵守這一標(biāo)準(zhǔn),那么較終展示的內(nèi)容就可以保持一致,不管你使用的是Windows還是Linux亦或是蘋果設(shè)備。這其中,傳輸標(biāo)準(zhǔn)被稱為HTTP,而展示標(biāo)準(zhǔn),就是HTML。
HTML的代碼部分其實(shí)很簡(jiǎn)單,任何一款瀏覽器在打開任意網(wǎng)頁(yè)后查看頁(yè)面源代碼就可以看到。它是由很多不同的標(biāo)記加上中間的標(biāo)記名構(gòu)成的,標(biāo)記的作用只有一個(gè),就是格式化內(nèi)容,例如文字的大小、顏色、位置等,以達(dá)到網(wǎng)站制作者想要的展示效果。
我們可以非??斓刂谱饕粋€(gè)較簡(jiǎn)單的網(wǎng)頁(yè),新建一個(gè)文本文件,打開并輸入如下內(nèi)容:
今天吃不吃早飯
算了,沒錢不吃了
保存這個(gè)文件,然后將擴(kuò)展名(txt)改為html,雙擊打開這個(gè)文件,你就可以在瀏覽器中看到一大一小兩行文字了。
在上面的代碼中,“<”和“>”和中間的字母或單詞就是所謂的標(biāo)記了。例如
表示以標(biāo)題1的規(guī)格顯示之后的內(nèi)容,
則自動(dòng)生成了一個(gè)段落。另外我們會(huì)注意到一個(gè)小細(xì)節(jié),就是幾乎所有的標(biāo)記都是成對(duì)出現(xiàn)的,以“/”符號(hào)開頭的標(biāo)記作為結(jié)束。
當(dāng)然,這里只用到了較基本的一些標(biāo)記,并且也沒有任何復(fù)雜的嵌套結(jié)構(gòu),事實(shí)上,HTML標(biāo)準(zhǔn)定義的標(biāo)記要豐富得多,通過(guò)各種標(biāo)記的使用或組合,可以實(shí)現(xiàn)任何你想要的排版風(fēng)格。
寄予厚望
HTML5中的5代表版本號(hào),我們可以簡(jiǎn)單地理解為第五代HTML標(biāo)準(zhǔn)(實(shí)際在HTML5之前有非常多的次要版本更新),這一代標(biāo)準(zhǔn)提出了很多重大的功能更新,例如:
1、CANVAS
CANVAS標(biāo)記允許開發(fā)者在瀏覽器中創(chuàng)建一個(gè)矩形區(qū)域,并通過(guò)javascript等腳本語(yǔ)言在這個(gè)區(qū)域中隨意顯示各種圖片信息,配合定時(shí)器和事件監(jiān)聽器,即可輕松實(shí)現(xiàn)動(dòng)畫和游戲。
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的
2、WebSockets
在HTML5之前,網(wǎng)站服務(wù)器是不會(huì)主動(dòng)向用戶推送數(shù)據(jù)的,所有的數(shù)據(jù)獲取都需要用戶主動(dòng)申請(qǐng)(例如點(diǎn)擊頁(yè)面上的某個(gè)按鈕),這導(dǎo)致了很多需求的不便,而websockets的出現(xiàn)終于可以讓服務(wù)器主動(dòng)推送數(shù)據(jù)了,想想這意味著什么,我們可以不借助任何額外的插件就能夠通過(guò)網(wǎng)頁(yè)來(lái)制作游戲和各種你能想到的軟件!注意,這些游戲和軟件不需要你下載任何客戶端并安裝,你需要的僅僅是一個(gè)瀏覽器!
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的
3、直接的多媒體支持
HTML5很粗暴地直接提供了和標(biāo)簽來(lái)支持多媒體內(nèi)容,而在此之前,我們只能通過(guò)FLASH來(lái)提供多媒體內(nèi)容。
4、硬件加速加持
其實(shí)硬件加速并不是HTML5的專有特性,但是正是由于HTML5大大豐富了內(nèi)容的來(lái)源,使得硬件加速的意義變得比以往任何時(shí)刻都重要。傳統(tǒng)以文字和圖片為主的頁(yè)面內(nèi)容即便采用硬件加速也無(wú)法獲得太多的優(yōu)勢(shì)。
當(dāng)然,HTML5的強(qiáng)大特性遠(yuǎn)不止以上這些,諸如本地化存儲(chǔ)、3D視覺特性、CSS3等等性能及功能的大幅度改進(jìn)都使得HTML5大有一統(tǒng)萬(wàn)維網(wǎng)數(shù)據(jù)終端之勢(shì)。當(dāng)然,現(xiàn)實(shí)總是不如想象美好。讓人略顯尷尬的是,直到今天,HTML5仍未完成它的制定者們對(duì)他原有的期待。
挫折
作為一個(gè)國(guó)際化的公開的行業(yè)標(biāo)準(zhǔn),卻同時(shí)成為了HTML5較大的原罪,那就是漫長(zhǎng)的草案階段,從2004年的雛形誕生到2014年較終標(biāo)準(zhǔn)發(fā)布,過(guò)去了整整十年,如此長(zhǎng)時(shí)間的拖延給了它較大的競(jìng)爭(zhēng)對(duì)手——FLASH以可乘之機(jī),作為一家獨(dú)立的公司,ADOBE的反應(yīng)速度要遠(yuǎn)快于HTML5的標(biāo)準(zhǔn)化組織,一些HTML5規(guī)劃中的新特性被很快整合到FLASH的新版本中。
漫長(zhǎng)的十年間,F(xiàn)LASH累積了太多的開發(fā)者、項(xiàng)目和資源,于是當(dāng)HTML5真正來(lái)到面前時(shí),苦逼的開發(fā)者們卻發(fā)現(xiàn)已經(jīng)很難拋棄FLASH了。
糟糕的情況還不止于此。
首先是標(biāo)準(zhǔn)的制定方式,HTML只定義了標(biāo)記的使用規(guī)范和輸出結(jié)果,但并不包括實(shí)現(xiàn)方式。也就是說(shuō),不同的瀏覽器是用不同的底層代碼來(lái)解析同一個(gè)標(biāo)記的,舉個(gè)例子,同樣通過(guò)標(biāo)簽播放的島國(guó)動(dòng)作片,在某些瀏覽器上能正常播放,在另一些上就可能無(wú)法播放,宅男們氣急敗壞的原因僅僅是因?yàn)楹笳邲]有集成相應(yīng)的解碼器……
諸如此類的問題還有很多,不同瀏覽器對(duì)于同一個(gè) 標(biāo)記的實(shí)現(xiàn)方式不斷出現(xiàn)一些細(xì)微差異,單個(gè)來(lái)看或許問題不大,但當(dāng)標(biāo)記和嵌套變多時(shí),這些細(xì)微差異就會(huì)被放大并較終導(dǎo)致同一段HTML5代碼在不同瀏覽器上產(chǎn)生的效果截然不同。這對(duì)商業(yè)項(xiàng)目來(lái)說(shuō)是致命的,開發(fā)者們不得不花費(fèi)大量的時(shí)間和精力在不同的瀏覽器上調(diào)試同一段代碼以達(dá)到盡可能相同的效果。
而FLASH在這方面具有先天優(yōu)勢(shì),F(xiàn)LASH的解釋器屏蔽了不同平臺(tái)的差異性,在運(yùn)行時(shí)將同樣的AS代碼(FLASH的開發(fā)語(yǔ)言)根據(jù)不同平臺(tái)轉(zhuǎn)換成不同的底層代碼,即便解釋器出現(xiàn)問題導(dǎo)致運(yùn)行時(shí)發(fā)生差異,那么也只需要ADOBE公司對(duì)解釋器進(jìn)行修正即可,加上FLASH的更新推送機(jī)制幾乎是強(qiáng)制和實(shí)時(shí)的,其修正的結(jié)果將在非常短的時(shí)間在所有客戶端獲得改善。而HTML的代碼則是直接由瀏覽器直接進(jìn)行解析并運(yùn)行,因此在瀏覽器修正該問題并被客戶端更新前,一個(gè)開發(fā)者遇到的問題,其他開發(fā)者同樣會(huì)出現(xiàn)。
其次,HTML5對(duì)于代碼本身的保護(hù)太弱。通過(guò)HTML5開發(fā)的項(xiàng)目,其邏輯代碼基本都是通過(guò)JavaScript實(shí)現(xiàn)的,而后者是一種腳本語(yǔ)言,通過(guò)瀏覽器的JS解釋器運(yùn)行,由于JS代碼需要嵌套在HTML代碼中才能被執(zhí)行,這意味著代碼文件是完全暴露在終端的,任何人都可以進(jìn)行查看。而所謂的代碼混淆也很容易被反編譯搞定,同時(shí)還可能帶來(lái)一些預(yù)期之外的問題,例如性能下降。
以上種種原因,使得在一些悲觀者看來(lái),HTML5較終會(huì)分崩離析,成為一個(gè)失敗的標(biāo)準(zhǔn)而被人們拋棄。然而抗?fàn)帍奈赐V梗琀TML5的杰克小強(qiáng)之路還在繼續(xù),24小時(shí)還沒播到較后一集,對(duì)手卻開始自亂陣腳了。
曙光
FLASH的缺陷和它的優(yōu)點(diǎn)同樣明顯,較根本的問題在于,它是ADOBE公司的私有產(chǎn)品,所有標(biāo)準(zhǔn)掌握在一家公司的手中,這種情況讓其他互聯(lián)網(wǎng)巨頭們非常不爽。
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的
另外,F(xiàn)LASH的解釋器也經(jīng)常爆出各種安全漏洞,然而較嚴(yán)重的還不是這個(gè),畢竟任何軟件產(chǎn)品都無(wú)法擺脫同樣的問題,關(guān)鍵在于FLASH的底層代碼是封閉的,一旦出現(xiàn)漏洞,除了等待ADOBE公司修復(fù)外,我們毫無(wú)辦法。
隨著對(duì)互聯(lián)網(wǎng)安全的要求不斷提高,F(xiàn)LASH的封閉特性已經(jīng)越來(lái)越不能滿足挑剔的人們,這其中較激進(jìn)的就要數(shù)已故的蘋果公司的前CEO史蒂夫·喬布斯了,他很早就在蘋果所有產(chǎn)品中禁用FLASH并大力推廣HTML5;Facebook的CEO扎克伯克甚至更激進(jìn)一些,他試圖直接讓HTML5應(yīng)用取代原生應(yīng)用;YouTube也在去年將HTML5設(shè)為默認(rèn)的視頻播放器......而較較關(guān)鍵的,就連FLASH的創(chuàng)造者ADOBE公司,也公開宣布逐步停止對(duì)FLASH的更新并轉(zhuǎn)到HTML5的相關(guān)開發(fā)上去。
至于本地代碼的安全性,在今天,越來(lái)越多的人認(rèn)為這似乎并不是什么問題,比起代碼的重要性,設(shè)計(jì)思想才是更為核心的競(jìng)爭(zhēng)力,并且如果是一個(gè)C/S架構(gòu)的網(wǎng)絡(luò)項(xiàng)目,服務(wù)器的重要程度遠(yuǎn)高于客戶端。
并且較終的較終,HTML5的正式標(biāo)準(zhǔn)畢竟已經(jīng)發(fā)布了不是么,所有的瀏覽器也已經(jīng)有了充分的時(shí)間不斷完善對(duì)HTML5的支持......
或許,HTML5的全面普及之路才剛剛開始。
當(dāng)我們看H5小歷史時(shí),F(xiàn)lash內(nèi)心肯定是崩潰的