不久前,Sencha創建了Fastbook,這是一個模仿Facebook原生應用的HTML5應用,在iOS與Android上的性能表現差不多,Sencha借此想要證明“HTML5現已就緒”。
Facebook CEO Mark Zuckerberg幾個月前曾經說過“公司最大的失誤就是在HTML5上投入太多,因為HTML5尚未就緒”,公司決定為iOS與Android創建原生應用,后者在一周前已經發布。常見的說法是HTML5尚未“就緒”、速度不夠快、由于缺少合適的工具導致開發起來困難重重。
來自Sencha(創建了HTML5及工具的知名公司)的兩位開發者決定證明HTML5已經就緒,并通過幾個月的業余時間創建了Fastbook。Fastbook是個HTML5應用,模仿了Facebook的原生應用,通過Facebook API進行真實的FB數據訪問(你應該在移動設備上使用該應用,在桌面瀏覽器中似乎不行)。
下面的視頻展示了在iOS/iPhone 4S與Android/Galaxy Nexus上對原生Facebook應用與Fastbook進行的測試。令人驚訝的是,在加載動態新聞并滾動新聞時,HTML5應用的性能與FB原生應用 一樣好,在幾處甚至還超越了FB應用(也許需要翻墻才能觀看視頻——譯者注):
在不同視圖間切換時,HTML5應用會緩存數據。FB原生應用則會重新加載動態新聞Fastbook使用了嵌套的無限列表來展示評論,這提供了更棒的用戶體驗Fastbook還提供了landscape布局在Android/Galaxy Nexus上,HTML5應用加載數據的速度要快于原生Facebook應用Fastbook創建者認為如果使用“網站開發方式”并且沒有使用“正確的應用開發工具”的話,那么HTML5應用的表現就會很差勁。
他們還發現Facebook的原生應用至少有兩處大的瑕疵:
它依然是個混合應用:“News Feed已經被移到了本地,并且擁有設定頁面,但很多其他應用UI只是簡單地向m.facebook.com發送HTTP GET請求而已?,F在的原生Facebook應用是個混合Web/原生應用:既有在m.facebook.com上渲染并在UIWebView上顯示的內 容,也有原生的Objective-C組件”。它所傳輸的數據超過了自身的需要,每10個條目就需要傳輸15KB到20KB的gzip壓縮JSON數據,這其中很多數據并不是渲染實際視圖所需要的。在代理服務器上清除FB數據后,Sencha團隊將數據傳輸量減少了90%。為了讓示例能夠成功運行起來,Sencha對其Touch框架進行了幾處改進:
為擁有未知數量條目的頁面添加了一個新的Infinite List組件。該列表包含了少量DOM結點,可以重用以渲染前一個/下一個條目。這有助于減少內存使用量,并且會極大降低大頁面的渲染時間。添加了一個新的Sandbox Container,“以編程的方式拆分復雜視圖并將其渲染到自己的iframe中,這會將DOM樹分割開來”。這么做的好處在于,動態新聞顯示會更快,因為News Feed、Timeline與Story視圖現在可以使用不同的容器了。與現有Task Queue更好的集成,這可以“防止對DOM讀寫的交叉,消除了不必要的布局。這與新的沙箱技術的結合能夠極大減少復雜視圖代價高昂的布局,比如說Timeline與News Feed”。添加了一個新的AnimationQueue類,它會將耗時的任務推遲到CPU空閑時執行。這對滾動很有幫助:當用戶快速滾動動態新聞時,圖像加載與渲染會暫停,直到滾動停下來為止,這是一種推薦做法。Fastbook使用了WebWorkers,它可以在單獨的線程而不是UI線程中獲取數據,使得滾動更加平滑。如果說去年夏天HTML5還不行的話,那么Sencha的這個示例就表明了現在的HTML5可以與原生應用一樣快,這證明了HTML5現已“就緒”,即便對于Facebook這種大型Web應用來說亦是如此。
Sencha還發起了HTML5 Is Ready,這是一個應用競賽,提供了$20,000獎金和設備,為的就是證明“優秀的開發者配上優秀的HTML5工具是可以開發出驚艷的應用的”。
新聞熱點
疑難解答