1. 程式人生 > >移動應用效率對比,Xamarin表現優異!

移動應用效率對比,Xamarin表現優異!

自從上一個部落格發表之後,我決定做一個更全面的測試,其中包括更多的開發語言和平臺。這一次,我添加了Java, Swift, C# 和 Ruby。 我把函式遷移到了 Objective-C,JavaScript和C++上, Object-C 是作為iOS的效能的比較基準,JavaScript可以讓我測試WebView, 移動瀏覽器和Titanium框架,至於Facebook的React Native 框架,等到他釋出之後,我也會加入測試。

 

測試步驟

和上次一樣,我執行每個測試10次取平均值,我修改了一些程式碼,目的是讓這個測試函式產生更多的運算。下面是所有的測試環境
 

  • Apple iPad Air 2 / iOS 8.2
  • Apple iPhone 6 / iOS 8.2
  • HTC Nexus 9 (2014) / Android 5.0.1
  • Motorola Moto X (2014) / Android 5.0
  • Xcode 6.3 beta 3(6D532l)
  • Android Studio 1.1.0
  • RoboVM 1.0 (1.0.0.201503101143)
  • RubyMotion 3.6
  • Xamarin Studio 5.8 (Xamarin.iOS 8.8.0.2 / Xamarin.Android 4.20.0.37)
  • J2ObjC 0.9.6.1
  • Titanium Studio 3.4.1.201410281727 / Titanium SDK 3.5.0


測試的程式碼在

1.我筆記

2.https://github.com/harrycheung/Mobile-App-Performance.

 

結果

 

 

結論

Xamarin的表現優異,比Object-C 要快30%。Xamarin在業內已然成為一個山大王,讓你很難找到不用他的理由。當然,大家會發現,這一次的結果和上一次有很大的不同,這是因為有網友(@migueldeicaza)指出在上一次的測試中,我不應該用DateTime.UtcNow,因為它有效率上的問題。於是,在這次的測試中,我就把它去掉了,得出現在的結果。不得不說,這個結果真的好到爆。


作為Objective-C的補充,我們可以看到J2ObjC表現很不錯,他把Java的程式碼轉換成Objective-C,且增加了10%的效率。而當我們使用Swift做中間庫,去連結Objective-C 或者J2ObjC的時候,我們發現他們的效率相同,我覺得Swift作為中間庫,消耗了很多資源。


官方已經release了RoboVM,效率跟Objective-C比起來還是很不錯的,我到真心希望它能支援Xcode的storyboards


Safari和WKWebView的表現大致相同。可以看出,蘋果做了一些Javascript引擎上的優化,使得他們的表現優於Chrome和Titanium。

這裡要提一下RubyMotion,RubyMotion是將Ruby編譯成ARM的彙編。但相比於Javascript的優異表現,RubyMotion競爭力還是不足。



我感到奇怪的是Android WebView的效率和Chrome Android的效率有很大不同,我開始認為他們是用了同樣的引擎,其實不是。

 

15/03/17日更新

有網友(@jl_hfl)指出,在Swift中的Point,我用class 而不是struct,會限制了Swift的效率。於是,我重構了程式碼,結果我們就有了新的山大王。我很喜歡看到這些效率上的提升,也希望大家多給我建議,讓我們一起優化這些App

 

15/03/19日更新

很多人都問我,遷移程式碼到C++的問題。跟預期的一樣,C++的效率在兩個平臺上都是最高的,但令人欣慰的是,Swift,Xamarin 和RoboVM跟C++ 也十分接近。 我現在和一些團隊合作,進行彙編程式碼的遷移。

 

15/03/22日更新

我加入了HTC Nexus 9 進行比較。這裡要說一點的是,Chrome的Javascript引擎,在兩個平臺上有很大的差距,HTC Nexus 9 要比Moto X 快很多,這主要是由於Nvidia 的 K1 Tegra CPU的優化。

 

15/03/23日更新

我加入了iPhone 6 用來測試,我發現J2ObjC的效率居然比Objective-C要高,我在iPad 2 Air上又確認了一遍。這次測試與之前測試最大的區別就是我重構了一些程式碼,之前我是複製一部分檔案到各個測試用例的,可能在這個過程中,出現了些問題,現在我是從程式碼中獲取這些檔案的,以保證測試用例的檔案都來自同一個地方。

 

總體來說,iPad Air 2在單個CPU核心的運算速度上,並沒有比iPhone 6 快多少。 他們的CPU很接近,只不過iPad有更多的核心,並且有100MHZ的差距。 但是值得注意的是WKWebView 的效率在這兩個平臺上是一樣的,我不明白其中的原因。通常的解釋是因為頻寬和網路的瓶頸所導致的,但是我的App並沒有用這些資源。

 

譯者注:本文轉自大神Harry Chenug 的部落格,他是Google的前僱員