Facebook 曾打響旗號,將其 iPhone app 和 android app 改為以 app container 配合 HTML5 來製成適合智能手機上使用的 mobile web app,一時將 HTML5 的風吹得熾熱,讓人們覺得 HTML5 web-based apps (a.k.a HTML5 app)正是手機程式開發的理想方向之一。然而近來又似乎在打退堂鼓……
Facebook 當時之所以選擇以 HTML5 app 作開發方向,為的是解決要如何以相對簡單的開發方式,來讓 Facebook 的資訊能在多種平台上顯示。所指的多種平台不只限於 iPhone 和 Android,還包含 window mobile, iPad, 林林種種的 tablets 多達 7000 種儀器……沒有打錯,是 FACEBOOK 的 Jonathan Dann 說的。是哪 7000 種?這不是探究重點。重點是現時許多流動儀器的確朝著支援上網功能,支援 HTML5 的方向走著。
By allowing us to write once and ship across multiple platforms, HTML5 has historically allowed us to keep the Facebook mobile experience current and widely available, and has been instrumental in getting us to where we are today.
Under the hood: Rebuilding Facebook for iOS by Jonathan Dann
若你的資訊平台是以 HTML5 建立,即代表你的平台可在支援 HTML5 的平台上自然而然地運行。再不用理會 JAVA、OBJECTIVE-C、C++ 等等看得眼花瞭亂的程式語言。
於是乎各樣標著支援 WEB-BASED APP DEVELOPMENT 的 JavaScript Framework 如 backbone.js, knockout.js, node.js, spine.js 等應運而生,吸引了各門各類的網頁開發員一窩蜂去學習(我也是其中一員)……直到有一天,人們開始轉折地道出其實「HTML5 WEB-BASED APP 不是萬能的」意見。
Facebook 2012年8月對其 iPhone app 作出升級,正是要更正 HTML5 app 的先天問題。尤其在 Facebook 上市後要正視更多投資者的要求,最主要解決的是應用程式的反應速度。平心自問,以網頁開發者的角度看,Facebook APP 的速度不算慢,但當與其他 APP 來相比,如 PINTEREST 、PATH、FOUR SQUARE 等,則明顯在快感體驗上有落差。原因是他們都是 NATIVE APP 寫的,能夠充份利用儀器的最大效能,而 HTML5 app 只能利用儀器的一部份功能,餘下的都是靠瀏覽器配件的運作效能來運行。以 Facebook app 來說,它雖然用 iOS app 作載體,但它大部份功能都是使用 UIWebView 這元件去把軟體從伺服端下載回來的內容 (XML格式) 加以分析然後呈現出來。這堆工作全靠 UIWebView 來執行,只有其他如拍照功能,相片選擇是用 iOS 元件作支援。而 UIWebView 並沒擁有優化的 JavaScript Engine 來執行 JavaScript 指令,最終導致「慢」的使用經驗。要解決這「慢」的問題,重新寫一支專對應儀器的程式是解決問題的不二方法。
HTML5 不是萬能,作為 FLASH DEVELOPER 來說,要製作驚嘆(Fancy)的網頁,單純靠瀏覽器來呈現複雜網頁是不夠的。HTML5 可以做很多從前 HTML4 時代較難做到的事情,但受制於瀏覽器的運作效能,要一個網頁單靠 JavaScript 來處理介面的實時改動,若程式編寫上有缺憾,與及瀏覽器未能配合運作要求,隨內容的動態增加,網頁便會慢下來,即是 HTML5 app 隨開啟時間的長度而慢下來。亦因為這樣,FLASH 網站需要 FLASH PLAYER 作載體,以補上瀏覽器的不足,提供更完善的記憶空間調控,向電腦獲取更多的資源以呈現較嘆人的內容。
Facebook 這次在 iPhone APP 編寫上作出的改動,為的是要解決「慢」這使用經驗的先決條件。當 APP 的使用速度夠快,往往跟使用群體數量的增加成若干正比。這從我最近工作上,完成一項大項目後,瀏覽我工作網站的人數有明顯的上升。這改變讓人頓感「快」感,是這改變的價值所以。只是 Facebook 的「一 CODE 走天下」的宏大理想遇上了考驗。我認同 Dann 所說,Facebook 利用 HTML5 技術讓 Facebook 在多個平台上能運行,在「廣」層面上完成了里程碑,接下來便是向「深」度進發:
So while utilizing web technology has allowed us to support more than 500 million people using Facebook on more than 7000 supported devices, we realized that when it comes to platforms like iOS, people expect a fast, reliable experience and our iOS app was falling short. Now that our mobile services had breadth, we wanted depth. So, we rewrote Facebook for iOS from the ground up.
「一CODE走天下」的,除了 FACEBOOK ,還有 LINKEDIN。
參考閱讀:
Facebook doubles iPhone app speed by dumping HTML5 for native code
http://www.guardian.co.uk/technology/appsblog/2012/aug/24/facebook-iphone-app
Under the hood: Rebuilding Facebook for iOS
https://www.facebook.com/notes/facebook-engineering/under-the-hood-rebuilding-facebook-for-ios/10151036091753920
Here’s why the Facebook iOS app is so bad (UIWebViews and no Nitro)
http://blog.mobtest.com/2012/05/heres-why-the-facebook-ios-app-is-so-bad-uiwebviews-and-no-nitro/
You’ll never believe how LinkedIn built its new iPad app (exclusive)
http://venturebeat.com/2012/05/02/linkedin-ipad-app-engineering/