Swift,任重而道远!
Swift,任重而道遠!
發表于2014-12-16 08:35| 8232次閱讀| 來源CSDN| 57 條評論| 作者伍昆
AppleSwiftObjective-C性能測試 width="22" height="16" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-12-15%2F2823135-Swift&type=3&count=&appkey=&title=%E8%8B%B9%E6%9E%9C%E5%85%AC%E5%8F%B8%E5%AF%B9%E5%A4%96%E5%AE%A3%E7%A7%B0%EF%BC%8C%E6%80%A7%E8%83%BD%E6%98%AFSwift%E5%B8%A6%E7%BB%99OS%20X%E5%92%8CiOS%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E7%9A%84%E5%A5%BD%E5%A4%84%E4%B9%8B%E4%B8%80%E3%80%82%E7%84%B6%E8%80%8C%EF%BC%8C%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E8%80%85Tyrone%E6%89%A7%E8%A1%8C%E7%9A%84%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%E6%98%BE%E7%A4%BA%EF%BC%8C%E4%B8%8EObjective-C%E7%9B%B8%E6%AF%94%EF%BC%8CSwift%E6%80%A7%E8%83%BD%E5%B9%B6%E4%B8%8D%E5%A6%82%E4%BA%BA%E6%84%8F%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1461112340624" frameborder="0" scrolling="no" allowtransparency="true">摘要:蘋果公司對外宣稱,性能是Swift帶給OS X和iOS開發人員的好處之一。然而,獨立開發者Tyrone執行的基準測試顯示,與Objective-C相比,Swift性能并不如人意。【編者按:】在今年的WWDC 2014大會上,蘋果公司發布了Swift。Swift語言不僅繼承了C語言以及Objective-C的特性,而且還克服了C語言的兼容性問題,對于廣大開發者來說是個不錯的選擇。然而,原文作者Tyrone卻并不待見Swift,他在使用Swift的過程中,發現Swift并沒有想象中的美好。究竟是什么原因呢?一起來看下:
譯文如下:
?在進行測試前,我作了如下思考:
- 誠然Swift在對數組進行排序時候獲得了與C相媲美的優異表現,但是其它方面呢?
- 可能是出于市場營銷的效率,蘋果給出的標簽是比Objective-C快2.6倍、比Python2.7?快8.4倍,真的嗎?
- 它有個優美的名字Swift(雨燕),輕盈迅捷,但我們不能沉迷于表象。
我這里主要以一個Swift項目為基礎,進行性能測試。以下是一個相關示例代碼:
[js] view plaincopyprint?這是一個用于分析500KB大小JSON數據的示例,完整的示例代碼請點擊 這里 進行下載,示例處理的問題是在1000個會話中找出用戶User對應的會員身份。解析器parser讀取JSON后,創建Membership對象并指向關聯實例User和Convo ,同時根據convos鍵值創建(或更新)Convo對象堆。
我利用了XCTest的新特性進行了性能測試。測試代碼如下所示:
[js] view plaincopyprint?我在編譯設置中開啟了-O模式,測試的設備是第五代iPod Touch,運行的系統是iOS 8,使用的是與iPhone4S相同的A5雙核處理器。隨著JSON數據處理量的增加,該設備的響應越來越慢。
測試結果是用時1.42s,多么令人吃驚的龜速。于是,我決定馬上創建一個Objective-C版本來進行對比。
[js] view plaincopyprint?同樣地我啟用了-Os。令人驚喜的是,這個版本的運行用時僅需0.09s,換而言之,它大約比Swift快了將近15倍,而我在Swift和Object-C都已經開啟了LLVM優化器。
我嘗試對Swift的反常表現進行簡單研究,我暫時還不能確定這究竟是Swift本身的原因還是JSONHelpder引起的。唯一的方法是一行行地比照Objective-C語句和Swift語句,再寫另一個Objective-C樣式的Swift,然后進行Apples To Apples的測試。這或許不是常規的Swift寫法,隨處都是NSDictionary引用而不是Swift 本身的函數。例如:
[js] view plaincopyprint?Swift在-O下運行時會有segfaults(段錯誤)的情況,為了公平起見,我把Object-C優化器關閉了,這是關閉后兩者的比較:
- Objective-C:0.06s
- Objective-C樣式的Swift:0.29s
讓我較迷惑的是Objective-C在關閉優化器后反而運行得更快,這個先放下,不是這次的重點。由上可見,Objective-C樣式的Swift獲得了可接受的性能表現,但是如果真的這樣做,段錯誤會不斷出現,最后導致性能下降。
出于好奇,最后我還使用了RubyMotion以Ruby語言重寫Objective-C測試。RubyMotion支持使用Ruby來編寫iOS 和安卓應用,程序最后會被編譯為相同的機器碼,與Swift和Objective-C過程類似。一直以來,我認為Ruby會比Objective-C慢得多,畢竟這是動態和靜態語言的區別。
該Ruby示例代碼如下:
[js] view plaincopyprint?注:RubyMotion中暫時沒有任何的優化設置選項。
最后的測試結果是:
可見,RubyMotion比Swift跑得更快。因此,Swift是不是真的如宣傳所說的那樣身手敏捷,真的見仁見智了。不過對于我來說,如果沒有進一步的改進,我決定還是使用Objective-C來編寫iOS項目好了。
以下是筆者摘取的部分精彩觀點:
來自 DemonicEgg的評論:
“本文做了和我差不多的測試,只是沒有使用一些第三方庫。我發現當我把全部類型轉為使用Swift?Array<>和Dictionary<>時,我發現更為驚嚇的后果,比Objective-C慢了差不多47倍?!?
來自 aeturnum的評論:“JSON解釋速度或許還不算最差的性能指標。只不過面對新語言時,留給開發組用來測試的時間預算會有多少呢?所以穩定的Objective-C還是首選?!?/p> 來自 vital_chaos的評論:
“我們不應該抹殺新事物。難道小baby一出生就會駕駛?所有語言都是經過千錘百煉才有今天的成就的。性能權且可以作為一個參考而不是全部。?
原文出自:Sudeium
(責編/夏夢竹)
更多精彩內容,敬請關注CSDN研發頻道微博,一起來暢聊。
本文為CSDN編譯整理,未經允許不得轉載,如需轉載請聯系market#csdn.net(#換成@)
總結
以上是生活随笔為你收集整理的Swift,任重而道远!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android人脸支付功能,androi
- 下一篇: The 10 Best Ways to