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