iOS客戶端開發與Web前端開發
不知不覺做 iOS 客戶端開發已經半年多了,了解到 iOS 客戶端開發與 Web 前端開發的一些異同,寫一下。
1、版本升級。用戶角度上看,客戶端升級必須讓用戶手動下載整個新的安裝包覆蓋安裝,而 web 的升級無需用戶做任何事情。開發角度上看,如果客戶端有個小 bug 需要緊急修復,需要修復完后打包一個完成的安裝包,給一個版本號,發布給用戶升級。而 web 只需要修改后臺的某些文件,然后傳到自己的服務器,用多快速的迭代開發方式都沒問題。web 沒有版本兼容性問題,客戶端這個問題就大了。
2、iOS 客戶端用編譯語言,web 用腳本語言。編譯語言好處:很多錯誤編譯期就知道,不用擔心類似寫錯一個字母導致的問題。iOS 客戶端開發只能用 XCode,無法選用自己喜歡的編輯器。使用腳本語言的 web 無論前端后端對編輯器的選擇都很自由。
3、客戶端一碰到異常就崩潰,直接退出,web 一個 try catch 可以把所有錯誤抓住,用戶可以繼續使用其他不受影響的功能,即使所有功能都受影響,刷新頁面搞定一切。web 上界面和程序實實在在地分離了,客戶端再怎樣都是粘合在一起的。
4、發現 HTML+CSS 樣式布局自動排列相當高級,客戶端上一切都靠程序去指定大小位置以及排列的變化,可視化的 XIB 挺雞肋。
5、單線程的 web 很幸福,客戶端要處理多線程,雖然強大,但很麻煩。web 幾乎不用考慮內存泄漏,客戶端需要。客戶端開發可以使用到很底層的接口和功能。web 處于較上層,在瀏覽器的包裹下,好處是很多問題瀏覽器處理 web 不用管,壞處是功能受限。
6、web 和客戶端開發差不多都使用類似 MVC 的模式,數據通過控制器更新到各個視圖。web 多用 callback,iOS 多用 delegate,雖然 iOS 也可以用 block 作為 callback,但還是沒 js 方便,還可能導致一些內存問題。
總的來說從開發普通應用來看,就算不談跨平臺,web 開發也是好處多多,但這只是開發角度上看,實際上移動設備上 webApp 狀況始終不好,與原生客戶端差距很大,原因:
1、網絡不行,流量要錢。國內網絡環境大家懂的,雖然 HTML5 有 manifest,storage 這些手段緩存 webApp,但給人感覺就是不靠譜,打開它還是跟打開一個網頁一樣的感覺:耗流量,還有可能在網絡不好的情況下打不開,沒有像已經下載下來的原生 APP 踏實。
2、動畫/體驗。一般的 web 在頁面間切換或顯示隱藏某個組件是沒有動畫的,大家也習慣了,iPhone 帶了個頭,一切都要動畫過渡,導致在移動設備上大家習慣了動畫切換,受不了沒有動畫的應用,導致動畫性能底下的 webApp 至今體驗上遠不如原生客戶端。
3、把 webApp 通過 safari 添加到主屏幕這樣的習慣非常不普及,極少人知道,不過這個應該也不算問題,若沒有上面兩個大問題,這個習慣很容易普及的。
P.S 在開發普通應用(數據處理/交互)方面,web 有很大的優勢,在網絡和性能問題解決后理應是首選開發方式。但在游戲領域我看不出 web 有什么優勢,繼續對有點熱的 HTML5 游戲開發表示不解。