新興技術襲來,Web開發如何抉擇?
2015/4/27 11:17:48 獨占網絡 獨占觀點
新興技術層出不窮,開發者在使用過程中,一定要注意對原始瀏覽器的支持:先要做好網站內容的語義化,讓計算機理解網站內容;同時做好SEO優化,并進一步開展“增強用戶體驗”的開發。
將Web視為應用平臺的概念,正前所未有的流行著。但用來創建這些所謂“Web應用”的工具仍存在許多經常被我們忽視或誤解的陷阱。單頁面Web應用框架已得到極大關注,我們可以借助這些框架創建一些復雜的高性能應用,與傳統網站相比,這些應用更可靠且交互更加豐富。但所有的這些益處,以及隨之而來的思維模式和開發方式的轉變,是以犧牲瀏覽器的基本功能為代價的,Web開發者們有時卻將其視為理所當然。
JavaScript可能非常脆弱
隨著各家廠商不斷地炒作這股熱浪,我們可能誤以為當用戶的瀏覽器不能執行JavaScript時,并不需要為他們提供回退方案。用戶的瀏覽器不能執行JavaScript一定事出有因,他們手動選擇禁用JavaScript只是眾多原因之一。維護英國政府網站的團隊——政府數字服務(GDS)發現:每500位訪問GOV.UK的用戶中,有5人沒有請求JavaScript,其中只有1人主動禁用了JavaScript,其他4人沒有請求可能因為以下幾個原因:企業代理服務器限制過高;高延遲導致JavaScript請求超時;甚或是一個沒有被注意到的語法錯誤。
此外,CSS和HTML都可以優雅降,而JavaScript卻做不到。這意味著,如果開發者使用一個單一的ES6語法特性,甚或是調用一個沒有經過驗證的標準庫函數,他們的JavaScript就很有可能在執行過程中終斷或者根本就不執行。如果你使用JavaScript來增強網站,上面提到的這些問題尚且可以忍受,畢竟訪問者仍然可以訪問鏈接,可以提交表單,可以使用Web能提供的原始功能;但如果JavaScript是網站必不可少的一部分時,無論是誰使用稍微過時的瀏覽器都可能獲得一個空白頁面,自然也沒有人來解釋頁面為什么會變成空白。
語義結構仍然非常重要
自1993年Tim Berners-Lee設計HTML以來,HTML為相互關聯的文檔網定義了一個通用結構,也就是我們熟知的Web。滲透在這個通用結構中的語義含義為Web頁面中包含的信息提供了計算機可以處理的上下文。從實際的意義來說,這些額外的信息增強了用戶使用Web瀏覽器時的體驗。舉個例子,Web瀏覽器可以實現一個向用戶的日歷中添加使用time元素定義的事件的方法;屏幕閱讀器可以用不同的方式通讀一個列表或一段文字,對于人類來說,文檔中的列表與段落看起來明顯不一樣,HTML提供的通用框架讓計算機也能夠清晰分辨列表與段落。
HTML暗含的語義含義使Web與諸如Cocoa、WPF以及Qt這樣的原生應用環境有著不同的發展方向。結構化的信息對Web來說非常重要,因為我們需要通過多種方式訪問Web信息。而當我創建一個iPhone應用時,我可以穩妥地假設每一個人都會用相同的方式去使用它。我的App總會以相同的方式呈現信息,并且我能夠完全掌控信息在應用里的終呈現。即使有些人通過VoiceOver(Apple為視障人群提供的輔助技術)與我的App進行交互,他們仍然可以與視力正常的用戶一樣:通過點擊屏幕進行操作。的不同是他們需要聽文字而不是去閱讀。
而這種方法在Web上卻行不通。人們除了通過Web瀏覽器訪問網站,還會通過類似Pocket、Instapaper這樣的應用來消費網站內容,這些應用嘗試使用Web頁面的結構化信息來提取網站的相關內容。智能手表上的瀏覽器可能直接忽略你的布局,然后通過更適合一英寸屏幕的方式展現你的信息。未來的設備也許能夠直接將網站提供的信息轉化為人類大腦中的思維,這誰又會知道呢?回過頭看,VoiceOver的工作原理是按順序朗讀用戶指尖下排列的文字,然而Web屏幕閱讀器則通讀全部文檔,忽略布局,并且通過HTML標簽的標準化語義來推斷文檔含義。舉個例子,近推出的main元素(譯者注:參考https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/main)用來定義文檔的主體部分,Web屏幕閱讀器可以讀取并識別這樣的標簽。對于一個視覺正常的用戶來說,通過Google Chrome訪問你的網站時,無論你使用<main>或者是<div id=”main”>
基本沒有區別。但對于使用其它Web客戶端的人來說,例如使用屏幕閱讀器或Instapaper,main元素隱含的含義可以讓軟件更好地幫助他們瀏覽文檔。
所以,開發一款Web應用不像為原生平臺開發那么簡單。在五個主流瀏覽器中確保應用能按照我們的需求正常工作并及時發布,對于Web平臺來說還遠遠不夠,我們需要在屏幕閱讀器中測試我們的工作成果,需要重審我們的標記來確保應用能提供盡可能多的語義元數據——不僅需要協調已有的Web客戶端,也要為將來可能出現的一切設備做準備。