コードを調整して、swiftのコンパイルを加速します.
3347 ワード
著者連結:興味のあるプログラマー:http://www.jianshu.com/users/94b6bbf8765a/latest_アートレス
0 x 00はコンパイル速度の問題に遭遇しました.
アップルはswift言語を強力に推進していますが、swift言語はあまりよくないです.
swift 1.2から実際のプロジェクトにswift言語を導入しました.もう一年以上経ちました.最近問題が発生しました.プロジェクトのコンパイル速度がだんだん遅くなりました.20分ぐらいになりました.ネットでも似たような問題を言う人が多いです.
コンパイル速度は直接に開発効率に影響します.
一定の研究と実験を行った後、いくつかの可能な改善方法が発見されました.
0 x 01編集swiftの翻訳速度をチェックします.コンパイル構成に設定し、コンパイル時間情報を出力します.Other Swift Flas追加設定:-Xfrontend-debug-function-bodies; は、build情報を文書ドキュメントdebug_に保存するbuildを実行する.buld_info.txt; は、すべての方法のコンパイル時間を抽出し、コンパイル時間に応じて、長いものから短いものへと情報を並べ替えます.grep[1-9]、[0-9]ms debug_build_info.txt(124)sort-nr>>build_slow.txt; コンパイル時間が長い方法を確認し、修正を行う. 検査によって、プロジェクトのコンパイル時間が500 msを超える方法がたくさんあります.これはコンパイル速度が遅い大きな元凶です.重点的に彼らを修正しました. .
0 x 02で発見された影響swiftコンパイル速度の要因
1.コンパイルパラメータ
swiftコンパイルの最適化オプションを開いていますか?whole module optimizationは、ある程度コンパイル速度に影響を与えます.Debugでオフすることができます.Releaseコンパイルの場合、オフには適しません.
2.タイプの導出:
タイプガイドは、コンパイルの速度が遅くなる原因かもしれません.ネット上では、非常にスペクトルから逸脱した例があります.コードのコンパイル時間が24時間を超えています.コードの内容は入れ子辞書の定義を初期化しただけです.このバグは今年の4月に発見されました.まだ存在しています.swiftは設計理論に欠陥があると推測します.したがって、この問題は解けません.以下はタイプ導出の例です.遅い 快速
表式に定数がある場合、コンパイラはコンパイラで計算することができます.コンパイラで計算するとコンパイラの速度が上がります.遅い 快速
複雑な表現の処理は、swiftコンパイラの弱さです.やや複雑な点の表現は、コンパイルに失敗することもあります.多くの人が会ったはずです.また、複雑な表現もコンパイル速度が遅くなります.遅い 快速 遅い 快速
配列の+演算子の使用は、コンパイル速度を著しく低下させます.エレガントな書き方ですが、現在は適切ではありません.遅い 快速
不debugの時、printを注釈します.
8.コードの警告
コード中の警告は必ず処理してください.
0 x 03その他
1.追加
他にもいくつかのコンパイル速度を高める方法がありますが、Swiftに対しても、ocは同じように有効ですので、詳しくは言いませんでした.例えば、frame work/libで置換するとコンパイルが必要なcocococoappods管理のコード(これは明らかです.)をコンパイルし、マルチスレッドコンパイルを設置し、より性能の良いコンピュータでDebug Information FormatをDWARFに変更します.
2.感想
以前、学校に行った時、コンパイラの原理を勉強しました.この授業が大好きです.でも、今度は役に立つと思いませんでした.
3.参考https://panupan.com/2016/02/16/how-to-speed-up-slow-swift-compile-times/ https://thatthinginswift.com/debug-long-compile-times-swift/ https://www.amazon.cn/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86-Alfd-V-Aho/dp/B 001 NGO 85 I/ref=sr_1_1?ie=UTF 8&qid=1476589755&sr=8-1&keywords=%E 7%BC%96%E 8%AFC%91%E 5 E%9 F%E 7%90% http://blog.csdn.net/zhaoxy_thu/articale/detail/3003485
0 x 00はコンパイル速度の問題に遭遇しました.
アップルはswift言語を強力に推進していますが、swift言語はあまりよくないです.
swift 1.2から実際のプロジェクトにswift言語を導入しました.もう一年以上経ちました.最近問題が発生しました.プロジェクトのコンパイル速度がだんだん遅くなりました.20分ぐらいになりました.ネットでも似たような問題を言う人が多いです.
コンパイル速度は直接に開発効率に影響します.
一定の研究と実験を行った後、いくつかの可能な改善方法が発見されました.
0 x 01編集swiftの翻訳速度をチェックします.
0 x 02で発見された影響swiftコンパイル速度の要因
1.コンパイルパラメータ
swiftコンパイルの最適化オプションを開いていますか?whole module optimizationは、ある程度コンパイル速度に影響を与えます.Debugでオフすることができます.Releaseコンパイルの場合、オフには適しません.
2.タイプの導出:
タイプガイドは、コンパイルの速度が遅くなる原因かもしれません.ネット上では、非常にスペクトルから逸脱した例があります.コードのコンパイル時間が24時間を超えています.コードの内容は入れ子辞書の定義を初期化しただけです.このバグは今年の4月に発見されました.まだ存在しています.swiftは設計理論に欠陥があると推測します.したがって、この問題は解けません.以下はタイプ導出の例です.
let createDate = NSDate(timeIntervalSince1970:interval) // ( )
if (doubleNum/60 < 1) { //
var strings: [String] = [] //
let createDate:NSDate = NSDate(timeIntervalSince1970:interval)
if (doubuleNum/60.0 < 1.0) {
var strings: [String] = [String]()
3.計算する表式表式に定数がある場合、コンパイラはコンパイラで計算することができます.コンパイラで計算するとコンパイラの速度が上がります.
let t=24*60*60*1000
let t=86400000 //24*60*60*1000
4.複雑な表現複雑な表現の処理は、swiftコンパイラの弱さです.やや複雑な点の表現は、コンパイルに失敗することもあります.多くの人が会ったはずです.また、複雑な表現もコンパイル速度が遅くなります.
txt = (note?.text ?? "") + "
" + selectedText
txt = note?.text ?? ""
txt += "
"
txt += selectedText
5.長すぎるチェーン操作r=a.func1().func2().func3()
let b=a.func1()
let c=b.func2()
r=c.func3()
6.配列+操作配列の+演算子の使用は、コンパイル速度を著しく低下させます.エレガントな書き方ですが、現在は適切ではありません.
let all = redBooks + greenBooks + yellowBooks
var all:[Book]=[Book]() //
for b in redBokks {
all.append(s) // +
}
for b in greenBokks {
all.append(s)
}
for b in yellowBokks {
all.append(s)
}
7.印刷関数不debugの時、printを注釈します.
8.コードの警告
コード中の警告は必ず処理してください.
0 x 03その他
1.追加
他にもいくつかのコンパイル速度を高める方法がありますが、Swiftに対しても、ocは同じように有効ですので、詳しくは言いませんでした.例えば、frame work/libで置換するとコンパイルが必要なcocococoappods管理のコード(これは明らかです.)をコンパイルし、マルチスレッドコンパイルを設置し、より性能の良いコンピュータでDebug Information FormatをDWARFに変更します.
2.感想
以前、学校に行った時、コンパイラの原理を勉強しました.この授業が大好きです.でも、今度は役に立つと思いませんでした.
3.参考