Swift,任重而道远!
Swift,任重而道遠(yuǎn)!
發(fā)表于2014-12-16 08:35| 8232次閱讀| 來源CSDN| 57 條評(píng)論| 作者伍昆
AppleSwiftObjective-C性能測(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">摘要:蘋果公司對(duì)外宣稱,性能是Swift帶給OS X和iOS開發(fā)人員的好處之一。然而,獨(dú)立開發(fā)者Tyrone執(zhí)行的基準(zhǔn)測(cè)試顯示,與Objective-C相比,Swift性能并不如人意。【編者按:】在今年的WWDC 2014大會(huì)上,蘋果公司發(fā)布了Swift。Swift語言不僅繼承了C語言以及Objective-C的特性,而且還克服了C語言的兼容性問題,對(duì)于廣大開發(fā)者來說是個(gè)不錯(cuò)的選擇。然而,原文作者Tyrone卻并不待見Swift,他在使用Swift的過程中,發(fā)現(xiàn)Swift并沒有想象中的美好。究竟是什么原因呢?一起來看下:
譯文如下:
?在進(jìn)行測(cè)試前,我作了如下思考:
- 誠(chéng)然Swift在對(duì)數(shù)組進(jìn)行排序時(shí)候獲得了與C相媲美的優(yōu)異表現(xiàn),但是其它方面呢?
- 可能是出于市場(chǎng)營(yíng)銷的效率,蘋果給出的標(biāo)簽是比Objective-C快2.6倍、比Python2.7?快8.4倍,真的嗎?
- 它有個(gè)優(yōu)美的名字Swift(雨燕),輕盈迅捷,但我們不能沉迷于表象。
我這里主要以一個(gè)Swift項(xiàng)目為基礎(chǔ),進(jìn)行性能測(cè)試。以下是一個(gè)相關(guān)示例代碼:
[js] view plaincopyprint?這是一個(gè)用于分析500KB大小JSON數(shù)據(jù)的示例,完整的示例代碼請(qǐng)點(diǎn)擊 這里 進(jìn)行下載,示例處理的問題是在1000個(gè)會(huì)話中找出用戶User對(duì)應(yīng)的會(huì)員身份。解析器parser讀取JSON后,創(chuàng)建Membership對(duì)象并指向關(guān)聯(lián)實(shí)例User和Convo ,同時(shí)根據(jù)convos鍵值創(chuàng)建(或更新)Convo對(duì)象堆。
我利用了XCTest的新特性進(jìn)行了性能測(cè)試。測(cè)試代碼如下所示:
[js] view plaincopyprint?我在編譯設(shè)置中開啟了-O模式,測(cè)試的設(shè)備是第五代iPod Touch,運(yùn)行的系統(tǒng)是iOS 8,使用的是與iPhone4S相同的A5雙核處理器。隨著JSON數(shù)據(jù)處理量的增加,該設(shè)備的響應(yīng)越來越慢。
測(cè)試結(jié)果是用時(shí)1.42s,多么令人吃驚的龜速。于是,我決定馬上創(chuàng)建一個(gè)Objective-C版本來進(jìn)行對(duì)比。
[js] view plaincopyprint?同樣地我啟用了-Os。令人驚喜的是,這個(gè)版本的運(yùn)行用時(shí)僅需0.09s,換而言之,它大約比Swift快了將近15倍,而我在Swift和Object-C都已經(jīng)開啟了LLVM優(yōu)化器。
我嘗試對(duì)Swift的反常表現(xiàn)進(jìn)行簡(jiǎn)單研究,我暫時(shí)還不能確定這究竟是Swift本身的原因還是JSONHelpder引起的。唯一的方法是一行行地比照Objective-C語句和Swift語句,再寫另一個(gè)Objective-C樣式的Swift,然后進(jìn)行Apples To Apples的測(cè)試。這或許不是常規(guī)的Swift寫法,隨處都是NSDictionary引用而不是Swift 本身的函數(shù)。例如:
[js] view plaincopyprint?Swift在-O下運(yùn)行時(shí)會(huì)有segfaults(段錯(cuò)誤)的情況,為了公平起見,我把Object-C優(yōu)化器關(guān)閉了,這是關(guān)閉后兩者的比較:
- Objective-C:0.06s
- Objective-C樣式的Swift:0.29s
讓我較迷惑的是Objective-C在關(guān)閉優(yōu)化器后反而運(yùn)行得更快,這個(gè)先放下,不是這次的重點(diǎn)。由上可見,Objective-C樣式的Swift獲得了可接受的性能表現(xiàn),但是如果真的這樣做,段錯(cuò)誤會(huì)不斷出現(xiàn),最后導(dǎo)致性能下降。
出于好奇,最后我還使用了RubyMotion以Ruby語言重寫Objective-C測(cè)試。RubyMotion支持使用Ruby來編寫iOS 和安卓應(yīng)用,程序最后會(huì)被編譯為相同的機(jī)器碼,與Swift和Objective-C過程類似。一直以來,我認(rèn)為Ruby會(huì)比Objective-C慢得多,畢竟這是動(dòng)態(tài)和靜態(tài)語言的區(qū)別。
該Ruby示例代碼如下:
[js] view plaincopyprint?注:RubyMotion中暫時(shí)沒有任何的優(yōu)化設(shè)置選項(xiàng)。
最后的測(cè)試結(jié)果是:
可見,RubyMotion比Swift跑得更快。因此,Swift是不是真的如宣傳所說的那樣身手敏捷,真的見仁見智了。不過對(duì)于我來說,如果沒有進(jìn)一步的改進(jìn),我決定還是使用Objective-C來編寫iOS項(xiàng)目好了。
以下是筆者摘取的部分精彩觀點(diǎn):
來自 DemonicEgg的評(píng)論:
“本文做了和我差不多的測(cè)試,只是沒有使用一些第三方庫。我發(fā)現(xiàn)當(dāng)我把全部類型轉(zhuǎn)為使用Swift?Array<>和Dictionary<>時(shí),我發(fā)現(xiàn)更為驚嚇的后果,比Objective-C慢了差不多47倍。”?
來自 aeturnum的評(píng)論:“JSON解釋速度或許還不算最差的性能指標(biāo)。只不過面對(duì)新語言時(shí),留給開發(fā)組用來測(cè)試的時(shí)間預(yù)算會(huì)有多少呢?所以穩(wěn)定的Objective-C還是首選。”
來自 vital_chaos的評(píng)論:“我們不應(yīng)該抹殺新事物。難道小baby一出生就會(huì)駕駛?所有語言都是經(jīng)過千錘百煉才有今天的成就的。性能權(quán)且可以作為一個(gè)參考而不是全部。?
原文出自:Sudeium
(責(zé)編/夏夢(mèng)竹)
更多精彩內(nèi)容,敬請(qǐng)關(guān)注CSDN研發(fā)頻道微博,一起來暢聊。
本文為CSDN編譯整理,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
總結(jié)
以上是生活随笔為你收集整理的Swift,任重而道远!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android人脸支付功能,androi
- 下一篇: The 10 Best Ways to