近年網頁前端開發講了又講、討論又討論的題目是: Web 1 vs Native。用 Web 技術還是用 Native 原生手機平台的?Native 速度、效能、反應也較好,但多平台開發不方便。而雖然瀏覽器不停進步,提升運行速度,但 Web 運行起來跟 Native 卻始終還是有點差別。於是人們花盡腦汁要提升 Web 效能,搞不會刷新的 SPA,能 Ajax 就 Ajax,甚至連 DOM 也不要。
Web or Native 這問題只有一個答案:看情況。然而,很多開發者發覺情況不太妙,極力模仿 Native 的 Web 忘了自己是甚麼。焦點錯了,就花費錯的力氣。我們看到很多明明是內容網站,卻要有 JS 才能看到內容。Back 鍵被廢武功。為了提供各種豐富功能,整個網站運行速度越來越慢。別以為 CSS 不會作怪,為了靚靚的字型可以令網頁無字十幾秒。
極力模仿 Native 的方法,是將 JS 變成虛擬機,然後就在這虛擬層上為所欲為,甚至拋棄 HTML 和 CSS,問題當然是沒有 JS 網站就完全不行了。人們說,誰沒有 JS 啊?的確 JS 是接近無處不在了,但電腦、手機效能總有落差,要 async 載入的內容更會增加連線負擔,在網速慢的地方更慘。
這甚至不是效能、速度的問題。網頁三大原素:HTML、CSS、JS,不是同等份量的。HTML 管結構,CSS 管外表,JS 管行為。一個網頁當然是結構最緊要,然後是外表,然後才是外加行為。HTML 是最札實的,每個瀏覽器的基本一定能夠顯示的部份。瀏覽器對 HTML 極之寬鬆,容許錯誤。CSS 亦能容錯。JS 因為是程式語言,最不能錯。你要將你的網頁內容依靠在那種技術之上?這是所謂的次序有先後,程度有深淺。
你可以進一步質疑,用程式角度,哪裏會不讓 runtime/JS 先行的道理?問題對了,因為用「程式角度」。網頁是用「文件角度」去看的。Web 發展至今,是用文件和連結編織而成的,文件的顯示和讀取是首要任務。而因為超連結,各個文件可以自由互連。這些文件為了可以互連,要做到盡量支持所有不同的瀏覽器:桌面、手機、純文字的、盲人用的,都可以讀到內容。內容優先,不是 runtime 優先。
如果你要做一個如 Gmail 的應用程式,儘管去模仿 Native,建立層層 abstraction。如果你要做一個網頁,其本質上是一份文件,就做好這份文件,使其符合網絡運作的原則,貢獻於網絡。網絡之父 Vint Cerf 擔心數位黑暗時代,我們累積下來的文件將因為電腦技術過時而不能重現,珍貴資料就此流失,我們應為這些內容立此存照。先不說要精確重現內容好了,能夠讓你的內容給 Internet Archive 抓下好嗎?
在此你可以劃界了:這是不是一份文件?Instagram 的相片獨立頁面算不算?一條公開的 facebook status 的算不算?一條文章下的討論又算不算?其實界線並非那麼難劃。
今年 FluentConf 主題是「網絡平台」(the Web Platform),Eric Meyer 卻在其中演溝大剌剌地說網絡非平台,它是獨立於平台的,它要在各平台上運行得好,又或者說它是一個 meta-platform。如果你只當 Web 是一個程式 runtime、一個 UI library,就要想想當中文件、連結、互通等等特質,是不是真的可以就此放棄的。
- Web 在這文指的是 World Wide Web。 ↩
本來無資訊,何處惹塵埃﹖ :P
太爛了吧