সুইফট সংকলন সময় এত মন্থর কেন?


209

আমি এক্সকোড 6 বিটা 6 ব্যবহার করছি।

এটি এমন কিছু যা এখন কিছু সময়ের জন্য আমাকে তুচ্ছ করে চলেছে, তবে এটি এমন এক পর্যায়ে পৌঁছেছে যা এখন সবেমাত্র ব্যবহারযোগ্য।

আমার প্রকল্পে একটি শালীন আকারের 65 টি সুইফ্ট ফাইল এবং কয়েকটি ব্রিজযুক্ত অবজেক্টিভ-সি ফাইল (যা সত্যই সমস্যার কারণ নয়) হতে শুরু করছে।

দেখে মনে হচ্ছে যে কোনও সুইফট ফাইলের ক্ষেত্রে কোনও সামান্য পরিবর্তন (যেমন অ্যাপটিতে সবেমাত্র ব্যবহৃত ক্লাসে একটি সাধারণ সাদা স্থান যুক্ত করা) নির্দিষ্ট টার্গেটের জন্য পুরো সুইফট ফাইলগুলি পুনরায় সংমিশ্রিত করবে cause

গভীর তদন্তের পরে, আমি খুঁজে পেয়েছি যে সংকলক সময়টির প্রায় 100% সময় নিচ্ছে তা হ'ল CompileSwiftধাপটি যেখানে Xcode swiftcআপনার টার্গেটের সমস্ত সুইফট ফাইলগুলিতে কমান্ড চালায় ।

আমি আরও কিছু তদন্ত করেছি এবং আমি যদি কেবলমাত্র একটি ডিফল্ট নিয়ামকের সাথে অ্যাপের প্রতিনিধি রাখি তবে সংকলনটি খুব দ্রুত হয় তবে আমি আমার প্রকল্পের ফাইলগুলিকে আরও সংযুক্ত করার সাথে সাথে সংকলনের সময়টি সত্যিই ধীর হতে শুরু করেছিল।

এখন কেবল 65 টি উত্স ফাইল সহ, প্রতিবার সংকলন করতে এটি 8-10 সেকেন্ড সময় নেয়। মোটেও খুব তাড়াতাড়ি নয়।

আমি কোনো পোস্ট ছাড়া এই সমস্যা সম্পর্কে কথা বলা দেখা যায় না এই এক , কিন্তু তাই আমি হতাশ করছি যদি আমি শুধুমাত্র সেই ক্ষেত্রে এক নই এটি XCode 6. এর একটি পুরোনো সংস্করণ ছিল।

হালনাগাদ

আমি কয়েক সুইফট প্রকল্প পরীক্ষা করেছি GitHub মত Alamofire , ইউলার এবং CryptoSwift কিন্তু তাদের কেউ আসলে তুলনা করার জন্য যথেষ্ট সুইফট ফাইল ছিল। আমি যে একমাত্র প্রকল্পটি দেখতে পেয়েছিলাম যে একটি শালীন আকারের শুরু হয়েছিল তা ছিল সুইফটএন এবং এটিতে কেবল এক ডজন উত্স ফাইল ছিল আমি এখনও একই জিনিস যাচাই করতে সক্ষম হয়েছি, একটি সাধারণ স্থান এবং পুরো প্রকল্পটির পুনরায় সংশোধন প্রয়োজন যা একটি গ্রহণ শুরু করেছিল অল্প সময় (২/৩ সেকেন্ড)।

অবজেক্টিভ-সি কোডের তুলনায় যেখানে বিশ্লেষক এবং সংকলন উভয়ই দ্রুত জ্বলছে, এটি সত্যই মনে হচ্ছে সুইফট কখনও বড় প্রকল্পগুলি পরিচালনা করতে সক্ষম হবে না, তবে দয়া করে আমাকে বলুন যে আমি ভুল।

এক্সকোড 6 বিটা 7 সহ আপডেট করুন

এখনও কোন উন্নতি। এটি হাস্যকর হতে শুরু করছে। #importসুইফ্টের অভাবের সাথে আমি সত্যিই দেখতে পাচ্ছি না যে অ্যাপল কীভাবে এইটিকে অনুকূল করতে সক্ষম হবে।

এক্সকোড 6.3 এবং সুইফট 1.2 দিয়ে আপডেট করুন

অ্যাপল ইনক্রিমেন্টাল বিল্ডস (এবং আরও অনেক সংকলক অপ্টিমাইজেশন) যুক্ত করেছে। এই সুবিধাগুলি দেখতে আপনাকে আপনার কোডটি সুইফট ১.২ এ মাইগ্রেট করতে হবে তবে অ্যাপল আপনাকে এটি করতে সহায়তা করার জন্য এক্সকোড a.৩ এ একটি সরঞ্জাম যুক্ত করেছে:

এখানে চিত্র বিবরণ লিখুন

যাহোক

আমার মতো খুব তাড়াতাড়ি আনন্দ করো না। বিল্ড ইনক্রিমেন্টাল করতে তারা যে গ্রাফ সলভারটি ব্যবহার করেন তা এখনও খুব ভালভাবে অনুকূলিত হয়নি।

প্রকৃতপক্ষে, এটি ফাংশন স্বাক্ষর পরিবর্তনের দিকে লক্ষ্য করে না তাই আপনি যদি একটি পদ্ধতির ব্লকে কোনও স্থান যোগ করেন তবে class শ্রেণীর উপর নির্ভর করে সমস্ত ফাইল পুনরায় সংযুক্ত করা হবে।

দ্বিতীয়ত, এটি পরিবর্তনগুলি প্রভাবিত না করে এমন কি ফাইলগুলি পুনরায় সংযুক্ত করা হয়েছিল তার উপর ভিত্তি করে গাছটি তৈরি করেছে বলে মনে হচ্ছে। উদাহরণস্বরূপ, যদি আপনি এই তিনটি ক্লাসটি বিভিন্ন ফাইলগুলিতে সরান

class FileA: NSObject {
    var foo:String?
}
class FileB: NSObject {
    var bar:FileA?
}
class FileC: NSObject {
    var baz:FileB?
}

এখন আপনি যদি সংশোধন করেন FileA, সংকলক স্পষ্টতই FileAপুনরায় সংযোগ করতে চিহ্নিত করবে । এছাড়া কম্পাইল হবে FileB(যে পরিবর্তন উপর ভিত্তি করে ঠিক আছে হবে FileA), কিন্তু এছাড়াও FileCকারণ FileBকারণ recompiled করা হয়, এবং যে বেশ খারাপ FileCকখনোই ব্যবহার FileAএখানে।

সুতরাং আমি আশা করি তারা সেই নির্ভরশীলতা গাছ সমাধানকারীকে উন্নতি করবে ... আমি এই নমুনা কোডটি দিয়ে একটি রাডার খুলেছি ।

এক্সকোড 7 বিটা 5 এবং সুইফট 2.0 দিয়ে আপডেট করুন

গতকাল অ্যাপল বিটা 5 প্রকাশ করেছে এবং রিলিজ নোটের ভিতরে আমরা দেখতে পেলাম:

সুইফট ল্যাঙ্গুয়েজ এবং কমপাইলার • বর্ধিত বিল্ডস: কোনও ফাংশনের কেবলমাত্র বডি পরিবর্তন করার ফলে আর নির্ভরযোগ্য ফাইলগুলি পুনরায় তৈরি করা উচিত নয়। (15352929)

আমি এটি চেষ্টা করে দেখেছি এবং অবশ্যই বলতে হবে এটি এখন সত্যিই (সত্যিই!) ভালভাবে কাজ করছে। তারা দ্রুতগতির ইনক্রিমেন্টাল বিল্ডগুলি ব্যাপকভাবে অনুকূল করেছে optim

আমি আপনাকে একটি swift2.0শাখা তৈরি করার এবং এক্স কোড 7 বিটা ব্যবহার করে আপনার কোডটি আপ টু ডেট রাখার পরামর্শ দিচ্ছি You

এক্সকোড 8.2 দিয়ে আপডেট করুন

এই বিষয়টিতে আমার শেষ আপডেটের পরে কিছুক্ষণ হয়ে গেছে তাই এখানে।

আমাদের অ্যাপ্লিকেশনটি এখন প্রায় একচেটিয়া সুইফট কোডের প্রায় 20k লাইন, যা শালীন তবে অসামান্য। এটি দ্রুত 2 এবং দ্রুত 3 মাইগ্রেশনের মধ্য দিয়ে গেছে। ২০১৪ সালের মাঝামাঝি ম্যাকবুক প্রো (2.5 গিগাহার্টজ ইন্টেল কোর আই 7) সংকলন করতে প্রায় 5/6 মি লাগবে যা একটি পরিষ্কার বিল্ডে ঠিক আছে।

তবে বর্ধমান বিল্ড আপেল দাবি করা সত্ত্বেও একটি রসিকতা রয়েছে:

যখন কেবলমাত্র ছোট পরিবর্তন ঘটে থাকে তখন এক্সকোড একটি সম্পূর্ণ লক্ষ্য পুনর্নির্মাণ করে না। (28892475)

স্পষ্টতই আমি মনে করি আমাদের অনেকেই এই বকাঝকাটি পরীক্ষা করার পরে হেসে ফেলেছিলেন (আমার প্রকল্পের যে কোনও ফাইলের জন্য একটি ব্যক্তিগত (ব্যক্তিগত!) সম্পত্তি যুক্ত করে পুরো জিনিসটি পুনরায় সংকলন করবে ...)

আমি আপনাকে বলছি অ্যাপল বিকাশকারী ফোরামে এই থ্রেডের দিকে ইঙ্গিত করতে চাই যাতে ইস্যুটি সম্পর্কে আরও কিছু তথ্য রয়েছে (পাশাপাশি কিছুক্ষণের মধ্যে এ বিষয়ে অ্যাপল দেব যোগাযোগের প্রশংসাও করা হয়েছে)

মূলত লোকেরা ইনক্রিমেন্টাল বিল্ডকে উন্নত করার চেষ্টা করার জন্য কয়েকটি জিনিস নিয়ে এসেছে:

  1. এতে একটি HEADER_MAP_USES_VFSপ্রকল্প সেটিং সেট করুনtrue
  2. Find implicit dependenciesআপনার স্কিম থেকে অক্ষম করুন
  3. একটি নতুন প্রকল্প তৈরি করুন এবং আপনার ফাইলগুলি হায়ারার্কিকে নতুনটিতে সরিয়ে দিন।

আমি সমাধান 3 চেষ্টা করব তবে সমাধান 1/2 আমাদের পক্ষে কার্যকর হয়নি।

এই পুরো পরিস্থিতিতে হাস্যকর মজার বিষয়টি হ'ল আমরা প্রথম সংকলনটি স্লোনেসে পৌঁছেছিলাম এবং এই মুহূর্তে অ্যাপল দের আসল উন্নতি সত্ত্বেও প্রায় দুই বছর পরে আমি বিশ্বাস করি যে আমরা সুইফট 1 বা সুইফট 1.1 কোডটি ব্যবহার করে এই ইস্যুতে প্রথম পোস্টটি দেখছি believe এক্সকোড with-এর মতো পরিস্থিতি ঠিক তত খারাপ How

আমি আসলে প্রকৃতই দৈনন্দিন হতাশা এটা জড়িত কারণ আমাদের প্রকল্পের জন্য OBJ / সি ওভার সুইফট নির্বাচন দু: খ প্রকাশ। (আমি এমনকি অ্যাপকোডে স্যুইচ করেছি তবে এটি অন্য গল্প)

যাইহোক আমি দেখি যে এই এসও পোস্টটিতে এই লেখাটি 32K + ভিউ এবং 143 টি আপস রয়েছে তাই আমি অনুমান করি যে আমি একমাত্র নই। এই পরিস্থিতি নিয়ে নিরাশাবাদী হওয়া সত্ত্বেও সেখানে থাকা ছেলেরা টানেলের শেষে কিছুটা আলোকপাত হতে পারে।

আপনার যদি সময় থাকে (এবং সাহস!) আমি অনুমান করি অ্যাপল রাডারকে এই সম্পর্কে স্বাগত জানায়।

পরের বার তিল! চিয়ার্স

এক্সকোড 9 দিয়ে আপডেট করুন

আজ এই হোঁচট খাচ্ছি । এক্সকোড চুপচাপ বর্তমানের ভয়াবহ পারফরম্যান্সের উন্নতির জন্য একটি নতুন বিল্ড সিস্টেম চালু করেছে। ওয়ার্কস্পেস সেটিংসের মাধ্যমে আপনাকে এটি সক্ষম করতে হবে।

এখানে চিত্র বর্ণনা লিখুন

এখনও চেষ্টা করে দেখেছেন তবে শেষ হয়ে গেলে এই পোস্টটি আপডেট করবেন। যদিও প্রতিশ্রুতিবদ্ধ।


1
মজাদার! আমি ভাবছি যদি এটি কেবলমাত্র অনুপস্থিত অপটিমাইজেশন বা কোনও ইন্টারফেস ফাইল না থাকায় এতগুলি ফাইল পার্স করার প্রয়োজন হয়।
zaph

2
একই রকম সমস্যা ছিল এবং শেষ পর্যন্ত আমি বুঝতে পেরেছিলাম যে এটি জেএসএন থেকে ডিসিরিয়ালাইজ করার জন্য সত্তা শ্রেণিতে ব্যবহৃত কাস্টম অপারেটরগুলির কারণ। আপনি যদি কোনওটি ব্যবহার করে থাকেন তবে আমি আপনাকে পরামর্শ দিচ্ছি যে একে একে সাধারণ ফাংশনে রূপান্তর করার চেষ্টা করুন এবং কিছু পরিবর্তন হয়েছে কিনা তা দেখুন।
আন্তোনিও

4
এক্সকোড bet বিটা since থেকে সংকলনটি আমার প্রকল্পে দাঁত-কৃপণভাবে ধীরে ধীরে হয়ে উঠেছে। যেখানে আমি নিশ্চিত নই যে এটি বিটাতে পরিবর্তন হয়েছে বা আমার কোডের কারণে if তবে আমার প্রকল্পটি এখনও বড় নয় (40-50 ডলার সুইফট ফাইল)।
ব্যাডমিন্টনকিট

2
আমার প্রকল্পটি বাড়ার সাথে সাথে সংকলন অসহনীয় ধীর হয়ে গেছে। আমি বেশ কয়েকটি শুঁটির উপরও নির্ভর করি, যা আমি নিশ্চিত যে বিষয়টি ইস্যুতে উদ্বিগ্ন। এটি সাম্প্রতিক নন-বিটা রিলিজটি ব্যবহার করছে।
অ্যান্ডি

2
ক্রমবর্ধমান বিল্ডটি এখনও একটি "রক্ষণশীল নির্ভরতা বিশ্লেষণে তৈরি করা হয়েছে, যাতে আপনি এখনও একেবারে প্রয়োজনীয়তার চেয়ে আরও বেশি ফাইল পুনর্নির্মাণ করতে পারেন।" আশা করি, সময়ের সাথে সাথে এটির উন্নতি হবে।
এনএমডিয়াস

উত্তর:


70

ঠিক আছে, দেখা গেল যে রব নেপিয়ার ঠিক ছিলেন। এটি একটি একক ফাইল (প্রকৃতপক্ষে একটি পদ্ধতি) যা সংকলকটি বার্জেকে যাচ্ছিল।

এখন আমার ভুল করবেন না। সুইফট আপনার ফাইলগুলি প্রত্যেকবার পুনরায় সংকলন করে, তবে এখন দুর্দান্ত বিষয়টি হ'ল অ্যাপল এটি সংকলিত ফাইলগুলির তুলনায় রিয়েল-টাইম সংকলন প্রতিক্রিয়া যুক্ত করেছে, তাই এক্সকোড 6 জিএম এখন দেখায় কোন সুইফট ফাইলগুলি সংকলিত হচ্ছে এবং রিয়েল টাইমে সংকলনের স্থিতি রয়েছে shows আপনি যেমন এই স্ক্রিনশট দেখতে পারেন:

এখানে চিত্র বিবরণ লিখুন

সুতরাং আপনার ফাইলগুলির মধ্যে কোনটি এত দীর্ঘ সময় নিচ্ছে তা জানার বিষয়টি খুব সহজ। আমার ক্ষেত্রে এটি কোডের এই অংশ ছিল:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : self.title ?? ""
        ])

return dic.copy() as NSDictionary

কারণ সম্পত্তি titleটাইপ ছিল var title:String?এবং না NSString। সংকলকটি এটিতে যুক্ত হওয়ার সময় পাগল হয়ে যাচ্ছিল NSMutableDictionary

এটিতে পরিবর্তন করা হচ্ছে:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : NSString(string: self.title ?? "")
        ])

return dic.copy() as NSDictionary

সংকলনটি 10/15 সেকেন্ড থেকে (এমনকি আরও বেশি) এক সেকেন্ডে নামিয়ে আনতে পেরেছিল ... আশ্চর্য।


3
উত্তরটি অনুসরণ করার জন্য ধন্যবাদ সংকলনের সময় টাইপ-ইনফারেন্স ইঞ্জিনটি ধাক্কা খেয়ে তাড়া করার জন্য এটি অন্যদের পক্ষে খুব দরকারী।
রব নেপিয়ার

1
@Pouche এই ভিউটি আপনি কোথায় পেলেন? আমি এটি এক্সকোডে দেখছি না
এরিক

2
আপনাকে ডিবাগ সহকারী (সিএমডি + 8) খুলতে হবে এবং বর্তমান
বিল্ডটিতে

1
হ্যাঁ আমি নিশ্চিত অ্যাপল পরে এটিকে আরও অনুকূল করে তুলবে, অন্যথায় দ্রুত বাস্তব প্রকল্পগুলি দ্রুতগতিতে করা এখানে এবং সেখানকার ব্যবস্থাপূর্ণ হবে।
Apouche

1
এই সরঞ্জামটিতে আমি কীভাবে যেতে পারি যা দেখায় যে কোন ফাইল সংকলিত হচ্ছে?
jgvb

42

আমরা এটিকে মোকাবিলার জন্য বেশ কয়েকটি জিনিস চেষ্টা করেছি কারণ আমাদের কাছে প্রায় 100k লাইনের সুইফট কোড এবং ওবজিসি কোডের 300k লাইন রয়েছে।

আমাদের প্রথম পদক্ষেপটি ছিল ফাংশন সংকলনের সময়ের আউটপুট অনুসারে সমস্ত ফাংশনকে অনুকূলকরণ করা (যেমন এখানে বর্ণিত https://thatthinginswift.com/debug-long-compile-times-swift/ )

এরপরে আমরা সমস্ত সুইফট ফাইলগুলিকে একটি ফাইলে একীভূত করতে একটি স্ক্রিপ্ট লিখেছিলাম, এটি অ্যাক্সেসের স্তরগুলিকে ভেঙে দেয় তবে এটি আমাদের সংকলনের সময়টি 5-6মিন থেকে min 1 মিনিটে নিয়ে আসে।

এটি এখন অচল হয়ে গেছে কারণ আমরা অ্যাপলকে এ সম্পর্কে জিজ্ঞাসা করেছি এবং তারা আমাদের নিম্নলিখিতগুলি করা উচিত বলে পরামর্শ দিয়েছে:

  1. 'সুইফ্ট সংকলক - কোড জেনারেশন' বিল্ড সেটিংসে 'সম্পূর্ণ মডিউল অপ্টিমাইজেশন' চালু করুন। নির্বাচন করা'Fast, Whole Module Optimization'

এখানে চিত্র বর্ণনা লিখুন

  1. আপনার বিকাশের জন্য 'সুইফ্ট সংকলক - কাস্টম ফ্ল্যাগস' এ যুক্ত করুন '-Onone'

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

এই পতাকাগুলি সেট করা থাকলে, সংকলকটি এক ধাপে সমস্ত সুইফ্ট ফাইল সংকলন করবে। আমরা আমাদের মার্জ স্ক্রিপ্টের সাথে এটি পৃথক পৃথকভাবে ফাইল সংকলনের চেয়ে অনেক দ্রুত is তবে, ' -Onone'ওভাররাইড ' ছাড়া এটি পুরো মডিউলটিকেও অনুকূলিত করবে, যা ধীর। আমরা যখন '-Onone'অন্য সুইফ্ট পতাকাগুলিতে পতাকাটি সেট করি তখন এটি অপ্টিমাইজেশন বন্ধ করে দেয়, তবে এটি এক ধাপে সমস্ত সুইফ্ট ফাইল সংকলন বন্ধ করে না।

পুরো মডিউল অপ্টিমাইজেশান সম্পর্কিত আরও তথ্যের জন্য, অ্যাপলের ব্লগ পোস্টটি এখানে দেখুন - https://swift.org/blog/ whole-module-optimizations/

আমরা এই সেটিংসটি 30 সেকেন্ডের মধ্যে আমাদের সুইফট কোডটি সংকলন করার অনুমতি পেয়েছি :-) এটি অন্যান্য প্রকল্পগুলিতে কীভাবে কাজ করবে সে বিষয়ে আমার কোনও প্রমাণ নেই, তবে আমি যদি সুইফ্ট সংকলনের সময়গুলি আপনার জন্য এখনও সমস্যা হয় তবে এটি চেষ্টা করার পরামর্শ দিই।

আপনার অ্যাপ স্টোর '-Onone'তৈরির জন্য নোট, আপনার পতাকাটি ছেড়ে দেওয়া উচিত , কারণ উত্পাদন তৈরির জন্য অনুকূলিতকরণের প্রস্তাব দেওয়া হচ্ছে।


4
এই পরামর্শের জন্য অনেক ধন্যবাদ! সরল উত্সগুলিতে কেন এটির মতো কিছুই নেই তা আমি কেবল বুঝতে পারি না (অন্তত সন্ধান করা সহজ) উদাহরণস্বরূপ আপনি যে নিবন্ধটি উল্লেখ করেছেন তার অবশ্যই (অবশ্যই!) মন্তব্য করা উচিত -Onone। আমরা আপাতত পুরো মডিউল অপ্টিমাইজেশন ব্যবহার করতে পারি না কারণ এটি সংকলক ক্র্যাশ করে তোলে ... তবে আপনার পরামর্শটি আমাদের বিল্ড গতির প্রায় x10 বাড়িয়ে তোলে। ম্যাকবুক এয়ারে (বার্ষিক 2013) এটি 8 মিনিটের কাছাকাছি তৈরি হচ্ছিল, এখন এটি প্রায় 1 মিনিট এবং অর্ধেকের চেয়ে কম সময় এটি লক্ষ্যগুলির মধ্যে স্যুইচিংয়ে ব্যয় করে (আমাদের অ্যাপ্লিকেশন, এক্সটেনশনগুলি এবং কিছু ঘরে বসে ফ্রেমওয়ার্ক রয়েছে) এবং স্টোরিবোর্ডগুলি সংকলন করে
ইলিয়া পুচকা

আমি এই পদ্ধতিটিও পরীক্ষা করে দেখেছি এবং এটি কেবলমাত্র উল্লিখিত পদ্ধতিতে একমাত্র অন্তর্ভুক্ত এবং এটি বিল্ড সময়কে উল্লেখযোগ্যভাবে হ্রাস করে।
ভ্লাদ

আমার সাথেও কাজ করুন। -Ononeবিল্ড সময় কমাতে সহায়তা ব্যবহার করে । অনেক সাথীকে ধন্যবাদ!
nahung89

34

আপনার প্রকল্পের আকারের সাথে এটির সামান্য যোগসূত্র রয়েছে। এটি সম্ভবত কোডের কিছু নির্দিষ্ট অংশ, সম্ভবত এমনকি কেবল একটি লাইন। আপনি পুরো প্রকল্পের চেয়ে একবারে একটি ফাইল সংকলনের চেষ্টা করে এটি পরীক্ষা করতে পারেন। অথবা কোন ফাইলটি এত দীর্ঘ সময় নিচ্ছে তা দেখতে বিল্ড লগগুলি দেখার চেষ্টা করুন।

যে ধরণের কোডের কারণে সমস্যা সৃষ্টি হতে পারে তার উদাহরণ হিসাবে, এই 38-লাইনের সংক্ষেপটি বিটা 7 সংকলন করতে এক মিনিটেরও বেশি সময় নেয়। এর সবগুলিই এই এক ব্লকের কারণে ঘটে:

let pipeResult =
seq |> filter~~ { $0 % 2 == 0 }
  |> sorted~~ { $1 < $0 }
  |> map~~ { $0.description }
  |> joinedWithCommas

কেবল একটি বা দুটি লাইন দ্বারা সরল করুন এবং এটি প্রায় তাত্ক্ষণিকভাবে সংকলন করে। সমস্যাটি হ'ল এটি সম্পর্কে সংকলকটিতে তাত্পর্যপূর্ণ বৃদ্ধি (সম্ভবত ঘটনামূলক বৃদ্ধি) ঘটছে। স্পষ্টতই এটি আদর্শ নয় এবং যদি আপনি এইরকম পরিস্থিতিগুলি বিচ্ছিন্ন করতে পারেন তবে এই সমস্যাগুলি পরিষ্কার করার জন্য আপনার রাডারগুলি খোলা উচিত।


আমি নিশ্চিত না যে আপনি আমার CompileSwiftপর্বটি সম্পর্কে মন্তব্য দেখেছেন । কেবলমাত্র একটি পরিবর্তন করা হলেও সমস্ত সুইফ্ট ফাইল এটি গ্রহণ করে। সুতরাং যদি এটির একটি ফাইল কিছুটা সময় নিয়ে থাকে (যা আমি অত্যন্ত সন্দেহ করি) তবে সংকলকটি কখনই আপনাকে বলতে পারবে না এটি কোনটি।
Apouche

10
swiftcতারা কতক্ষণ সময় নেয় তা ব্যবহার করে আপনি পৃথক ফাইলগুলি সংকলন করতে পারেন।
রব নেপিয়ার

আপনাকে অনুগ্রহ না দেওয়ার জন্য আমি ক্ষমাপ্রার্থী কারণ আমি প্রথমে এটি বিশ্বাস করি না। আমি ফাইলগুলিও একে একে সংকলন করার চেষ্টা করেছি তবে এটি করা জটিল ছিল (প্রতিটি সময় সঠিকভাবে ফ্রেমওয়ার্কগুলি দিতে হয়েছিল, এবং Deps) তাই আমি ছেড়ে দিয়েছি। সম্পূর্ণ ব্যাখ্যা জন্য এই পোস্টে আমার সর্বশেষ উত্তর দেখুন
apouche

আমি মনে করি না এটি প্রকল্পের আকার ভিত্তিক। আমার প্রকল্পে কেবল 4 টি সুইফ্ট ফাইল রয়েছে এবং হঠাৎ করে অবিশ্বাস্যরূপে ধীরগতির সংকলন শুরু হয়েছে। এটি গতকাল দ্রুত আলো ছিল। আইকন যোগ এবং লঞ্চ চিত্রগুলি ব্যতীত বিশেষত আমার প্রকল্পে আমি যা কিছু করেছি তাতে আঙুল রাখতে পারি না।
ট্র্যাভিস এম।

33

যদি আপনি নির্দিষ্ট ফাইলগুলি সনাক্ত করার চেষ্টা করছেন যা আপনার সংকলনের সময়কে ধীর করে দেয়, আপনি এটি আপনার কমান্ড লাইন থেকে xctool এর মাধ্যমে সংকলনের চেষ্টা করতে পারেন যা আপনাকে ফাইলের মাধ্যমে ফাইলগুলি সংকলনের সময় দেয়।

লক্ষ্য করার বিষয়টি হ'ল, ডিফল্টরূপে, এটি প্রতিটি সিপিইউ কোর প্রতি একযোগে 2 টি ফাইল তৈরি করে এবং আপনাকে "নেট" কেটে যাওয়া সময় দেয় না, তবে পরম "ব্যবহারকারী" সময় দেয়। সমান্তরালিত ফাইলগুলির মধ্যে সমস্ত সময় এমনকি এইরকমই হয় এবং খুব সাদৃশ্যযুক্ত দেখায়।

এটি কাটিয়ে উঠার জন্য, পতাকাটি 1 এ সেট করুন-jobs , যাতে এটি ফাইলের বিল্ডগুলির সমান্তরাল না হয়। এটি বেশি সময় নিবে, তবে শেষ পর্যন্ত আপনার "নেট" সংকলন সময় হবে যে আপনি ফাইল দ্বারা ফাইলের তুলনা করতে পারেন।

এটি একটি উদাহরণ কমান্ড যা কৌশলটি করা উচিত:

xctool -workspace <your_workspace> -scheme <your_scheme> -jobs 1 build

"সংকলন সুইফ্ট ফাইল" পর্বের আউটপুট এমন হবে:

...Compile EntityObserver.swift (1623 ms)Compile Session.swift (1526 ms)Compile SearchComposer.swift (1556 ms)
...

এই আউটপুট থেকে আপনি দ্রুত সনাক্ত করতে পারবেন যে কোন ফাইলগুলি সংকলন করতে অন্যের চেয়ে বেশি সময় নিচ্ছে। তদুপরি, আপনার রিফ্যাক্টরিংগুলি (স্পষ্ট বর্ণ, টাইপ ইঙ্গিত, ইত্যাদি) নির্দিষ্ট ফাইলগুলির জন্য কমপাইলের সময় হ্রাস করছে কিনা তা আপনি উচ্চ নির্ভুলতার সাথে নির্ধারণ করতে পারেন।

দ্রষ্টব্য: প্রযুক্তিগতভাবে আপনি এটি দিয়েও করতে পারেন xcodebuildতবে আউটপুটটি অবিশ্বাস্যভাবে ভার্বোজ এবং গ্রাস করা শক্ত।


1
আপনার প্রকল্পের পুরো মডিউল অপটিমাইজেশনটি মিথ্যাতে সেট করা আছে তা নিশ্চিত করুন বা এটি পৃথক সুইফ্ট ফাইলগুলি আলাদা করবে না।
সাব

1
দেখুন Swift CompilerOptimization Levelজন্যFast, Whole Module Optimization [-O -whole-module-optimization]
ম্যাট

26

আমার ক্ষেত্রে, এক্সকোড 7 মোটেও কোনও পার্থক্য করেনি। আমার একাধিক ফাংশন সংকলন করতে কয়েক সেকেন্ডের প্রয়োজন ছিল।

উদাহরণ

// Build time: 5238.3ms
return CGSize(width: size.width + (rightView?.bounds.width ?? 0) + (leftView?.bounds.width ?? 0) + 22, height: bounds.height)

বিকল্পগুলি মোড়ক দেওয়ার পরে, বিল্ড সময়টি 99.4% হ্রাস পেয়েছে

// Build time: 32.4ms
var padding: CGFloat = 22
if let rightView = rightView {
    padding += rightView.bounds.width
}

if let leftView = leftView {
    padding += leftView.bounds.width
}
return CGSizeMake(size.width + padding, bounds.height)

আরও উদাহরণ দেখুন এই পোস্টে এবং এই পোস্টে

এক্সকোডের জন্য বিল্ড টাইম অ্যানালাইজার

আমি একটি এক্সকোড প্লাগইন তৈরি যা এই সমস্যাগুলির জন্য যে কেউ ব্যবহার করতে পারে।

ভাবমূর্তি

সুইফ্ট 3-এ উন্নতি হবে বলে মনে হচ্ছে তাই আশা করি আমরা আমাদের সুইফট কোডটি আরও দ্রুত সংকলন দেখতে পাব।


দুর্দান্ত, আশা করি আমি আপনাকে +1 এর চেয়ে বেশি দিতে পারি। আপনি সত্য এবং আপনার প্লাগইনটি দুর্দান্ত। আমি এটি ব্যবহার করেছি এবং আমার নির্মাণের সময় হ্রাস পাচ্ছে, যার অর্থ সুপার দ্রুত বিকাশ কারণ এই বিকল্পগুলি কখনও কখনও দুঃস্বপ্ন এবং সংকলককে ধীর করে দেয়।
hardikdevios

কল্পনাপ্রসূত! আপনার সরঞ্জাম আমাকে অনেক সাহায্য করে। ধন্যবাদ
ফিল

দুর্দান্ত প্লাগইন - সত্যিই দরকারী! ধন্যবাদ
365SplendidSuns

@ রবার্ট গুমেসন, অবজেক্টিভ-সি কোডের জন্য আমাদের কি কোনও সরঞ্জাম আছে?
অশোক

19

সম্ভবত আমরা সুইফ্ট সংকলকটি ঠিক করতে পারি না, তবে আমরা যা কিছু ঠিক করতে পারি তা আমাদের কোড!

সুইফ্ট সংকলকটিতে একটি লুকানো বিকল্প রয়েছে যা প্রতিটি একক ক্রিয়াকলাপ সংকলনের জন্য সংকলকটি গ্রহণ করে এমন সঠিক সময় অন্তরগুলি মুদ্রণ করে: -Xfrontend -debug-time-function-bodies। এটি আমাদের কোডে বাধা খুঁজে পেতে এবং সংকলনের সময়কে উল্লেখযোগ্যভাবে উন্নত করতে দেয়।

টার্মিনালে নিম্নলিখিতটি চালান এবং ফলাফল বিশ্লেষণ করুন:

xcodebuild -workspace App.xcworkspace -scheme App clean build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep [1-9].[0-9]ms | sort -nr > culprits.txt

অসাধারণ ব্রায়ান ইরাস এটি সম্পর্কে আপনার উজ্জ্বল সংকলনের সময়গুলি রচনা করে একটি উজ্জ্বল নিবন্ধ লিখেছিল ।


2
alias grep='noglob grep'Zsh সহ প্রথমে যারা , প্রথম দিকে গ্রেপ কাজ করবে না
Jaime Agudo

16

সমাধান কাস্টিং হয়।

আমার কাছে প্রচুর টন অভিধান ছিল:

["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
.....

এটি তৈরি করতে প্রায় 40 মিনিট সময় লেগেছে। যতক্ষণ না আমি অভিধানগুলি কাস্ট করেছি:

["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
....

এটি প্রায় প্রতিটি সমস্যার জন্য কাজ করে যা আমি আমার অ্যাপ্লিকেশনটিতে কঠোরভাবে কোডড করে ডেটা ধরণের ক্ষেত্রে দেখেছি।


6
হ্যাঁ, সংকলনের সময়গুলি উন্নত করার জন্য এটি আপনার যে অপটিমাইজেশন রয়েছে তার অংশ, তবে বর্তমান সুইফ্ট সংকলকটি নিয়ে এখনও মূল সমস্যাটি হ'ল এটি প্রতিবার আপনি যখন সামান্যতম পরিবর্তন করেন তখন এটি একক সুইফট ফাইলটিকে পুনরায় সংযুক্ত করে।
অপুচে

4
এটি এত দুঃখজনক না হলে মজার হবে।
টম অ্যান্ডারসন

15

একটি বিষয় লক্ষণীয় তা হল যে সুইফ্ট টাইপের ইনফারেন্স ইঞ্জিন নেস্টেড প্রকারের সাথে খুব ধীর হতে পারে। আপনি দীর্ঘ সময় নিচ্ছেন এমন পৃথক সংকলন ইউনিটগুলির জন্য বিল্ড লগটি দেখে টার্মিনাল উইন্ডোয় পূর্ণ Xcode-spawned কমান্ডটি অনুলিপি করে এবং তারপরে সিটিআরএল- hit টিপে হস্তান্তর কী ঘটছে সে সম্পর্কে আপনি একটি সাধারণ ধারণা পেতে পারেন get কিছু ডায়গনিস্টিকস। সম্পূর্ণ উদাহরণের জন্য http://blog.impathic.com/post/99647568844/debugging-slow-swift-compile- times এ একবার দেখুন ।


এটি আমার পক্ষে সেরা উত্তর (লিঙ্কটি দেখুন)। আমি সহজেই দুটি ভিন্ন লাইন খুঁজে পেতে পারি যা একটি সমস্যা ছিল এবং আমার লাইনগুলি ছোট লাইনগুলিতে বিভক্ত করে সমাধান করেছিল।
নিকো

এটি একটি খুব দরকারী উত্তর কারণ এটি কোথায় কম্পাইলার পাগল হয়ে গেছে তা কীভাবে সন্ধান করবে তা দেখায়। আমার ক্ষেত্রে এটি নিম্নরূপ ছিল: 'কারস্কোর [কার্প্লেয়ার% 2] + কারস্কোর [২ + কারপ্লেয়ার% 2] == 3 && প্রস্তুতকারক% 2 == কারপ্লেয়ার% 2' যত তাড়াতাড়ি আমি এটিকে 'যদি' থেকে 'সরানো' যেতে পারি ', এর ফলে "যুক্তিটি যথাযথ সময়ে সমাধান করা খুব জটিল ছিল; এক্সপ্রেশনটি আলাদা উপ-এক্সপ্রেশনে ভাঙ্গা বিবেচনা করুন"
দিমিত্রি

এটি অবশ্যই এই সমস্যাটি সমাধানের সবচেয়ে সহায়ক উপায়।
রিচার্ড ভেনেবল

9

এছাড়াও নিশ্চিত হয়ে নিন যে ডিবাগের জন্য সংকলন করার সময় (সুইফট বা উদ্দেশ্য-সি), আপনি কেবল সক্রিয় আর্কিটেকচার তৈরিতে সেট করেছেন:

এখানে চিত্র বর্ণনা লিখুন


6

যেহেতু এই সমস্ত জিনিস বিটাতে রয়েছে, এবং যেহেতু সুইফ্ট সংকলকটি (কমপক্ষে আজকের হিসাবে) খোলা নেই, তাই আমি অনুমান করি যে আপনার প্রশ্নের সত্যিকারের কোনও উত্তর নেই।

প্রথমত, অবজেক্টিভ-সি এর সাথে সুইফ্ট সংকলকটির তুলনা করা একরকম নিষ্ঠুর। সুইফট এখনও বিটাতে রয়েছে এবং আমি নিশ্চিত যে অ্যাপল বিদ্যুত গতির চেয়ে আরও বেশি কার্যকারিতা প্রদান এবং বাগ ফিক্সিংয়ে কাজ করছে (আপনি আসবাব কিনে বাড়ি তৈরি শুরু করবেন না)। আমার ধারণা অ্যাপল যথাসময়ে সংকলকটি অনুকূলিত করবে।

যদি কোনও কারণে সমস্ত উত্স ফাইলগুলি সম্পূর্ণ সংকলন করতে হয়, তবে একটি বিকল্প পৃথক মডিউল / লাইব্রেরি তৈরি করতে পারে। তবে এই বিকল্পটি এখনও সম্ভব নয়, কারণ ভাষা স্থিতিশীল না হওয়া পর্যন্ত সুইফ্ট লাইব্রেরিগুলিতে অনুমতি দিতে পারে না।

আমার অনুমান যে তারা কম্পাইলারটি অপ্টিমাইজ করবে। একই কারণে যে আমরা প্রাক-সংকলিত মডিউলগুলি তৈরি করতে পারি না, এটি ভালভাবে হতে পারে যে সংকলকটিকে স্ক্র্যাচ থেকে সমস্ত কিছু সংকলন করা দরকার। তবে ভাষাটি যখন কোনও স্থিতিশীল সংস্করণে পৌঁছে যায় এবং বাইনারিগুলির ফর্ম্যাটটি আর পরিবর্তন হয় না, আমরা আমাদের গ্রন্থাগারগুলি তৈরি করতে সক্ষম হব এবং সম্ভবত (?) সংকলকও এর কাজটিকে অনুকূল করতে সক্ষম হবে।

কেবল অনুমান করা, যদিও কেবল অ্যাপলই জানেন ...


"একই কারণে যে আমরা প্রাক-সংকলিত মডিউলগুলি তৈরি করতে পারি না, এটির পক্ষে ভাল হতে পারে যে সংকলকটিকে স্ক্র্যাচ থেকে সমস্ত কিছু সংকলন করা দরকার" " সুন্দর পর্যবেক্ষণ, এর আগে সেভাবে ভাবেনি।
চক্রত

1
2017 এবং এটি এখনও ধীর
পেড্রো পাওলো আমোরিম


এক্সকোড 9 এর সাথে 2018, আমার কাছে 50+ সুইফ্ট ফাইল সহ একটি প্রকল্প রয়েছে, যদি আমি ক্লিন বিল্ড করি তবে এটি এখন 5 মিনিটের ব্যবধান পেরিয়ে গেছে এবং আমার সংকলনটি এখনও সম্পন্ন হয়নি।
চেন লি ইয়ং

5

এক্সকোড 8 এর জন্য, প্রকল্পের সেটিংসে যান, তারপরে সম্পাদক> বিল্ড সেটিং যুক্ত করুন> ব্যবহারকারী-সংজ্ঞায়িত সেটিং যুক্ত করুন এবং নিম্নলিখিতগুলি যুক্ত করুন:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

এই ফ্ল্যাগটি যুক্ত করা আমাদের ক্লিন-বিল্ড সংকলন বারগুলিকে অলৌকিকভাবে 40 কেএলসি সুইফ্ট প্রকল্পের জন্য 7 মিনিট থেকে 65s এ নামিয়ে দিয়েছে। 2 জন বন্ধু এন্টারপ্রাইজ প্রকল্পগুলিতে একই রকম উন্নতি দেখে নিশ্চিত করতে পারে।

আমি কেবল ধরে নিতে পারি এটি এক্সকোড 8.0 এ কোনও ধরণের বাগ is

সম্পাদনা: কিছু লোকের জন্য এটি Xcode 8.3 এ আর কাজ করবে বলে মনে হয় না।


2
দয়া করে "প্রকল্প সেটিংস" কোথায়?
রানী

@ রানী এক্সকোডের বাম ফলকের মূল স্তরের নীল আইকনে ক্লিক করুন।
ক্রিস

আমি Xcode 8.3 (নন-বিটা) হিসাবে খুঁজে পাচ্ছি যে এটি আমার ক্ষেত্রে আর কাজ করে না :(
ক্রিস

4

দুর্ভাগ্যক্রমে, সুইফ্ট সংকলকটি এখনও দ্রুত এবং বর্ধিত সংকলনের জন্য এক্সকোড 6.3 বিটা হিসাবে অনুকূল নয়। এদিকে আপনি সুইফট সংকলনের সময় উন্নত করতে নিম্নলিখিত কয়েকটি কৌশল ব্যবহার করতে পারেন:

  • পুনঃসংশোধনের প্রভাব কমাতে অ্যাপটিকে ফ্রেমওয়ার্কগুলিতে বিভক্ত করুন। তবে সচেতন হন যে আপনাকে অবশ্যই আপনার অ্যাপ্লিকেশনটিতে চক্রীয় নির্ভরতা এড়ানো উচিত। এই বিষয়ে আরও তথ্যের জন্য এই পোস্টটি দেখুন: http://bit.citrusbyte.com/improving-swift-compile-time/

  • আপনার প্রকল্পের অংশগুলির জন্য সুইফ্ট ব্যবহার করুন যা বেশ স্থিতিশীল এবং প্রায়শই পরিবর্তন হয় না। অন্যান্য ক্ষেত্রগুলিতে যেখানে আপনাকে খুব ঘন ঘন পরিবর্তন করতে হবে বা এমন ক্ষেত্রগুলির জন্য যেগুলি সম্পূর্ণ করতে প্রচুর সংকলন / রান পুনরুক্তি প্রয়োজন (প্রায় কোনও ইউআই সম্পর্কিত স্টাফ), মিশ্রণ এবং ম্যাচ পদ্ধতির সাথে অবজেক্টিভ সি ব্যবহার করে আরও ভাল।

  • 'এক্সকোডের জন্য ইনজেকশন' দিয়ে রানটাইম কোড ইঞ্জেকশন চেষ্টা করুন

  • রূপক পদ্ধতিটি ব্যবহার করুন: http://roopc.net/posts/2014/speeding-up-swift-builds/

  • সুস্পষ্ট ক্যাসেটের সাথে কিছু ইঙ্গিত দিয়ে সুইফ্ট প্রকারের ইনফারেন্স ইঞ্জিনটি ত্রাণ করুন।


4

সুইফট অ্যারে এবং অভিধানগুলি নির্মাণের জন্য এটি বেশ জনপ্রিয় কারণ বলে মনে হচ্ছে (বিশেষত আপনার জন্য যারা রুবি ব্যাকগ্রাউন্ড থেকে আসে ), এটি হ'ল

var a = ["a": "b",
         "c": "d",
         "e": "f",
         "g": "h",
         "i": "j",
         "k": "l",
         "m": "n",
         "o": "p",
         "q": "r",
         "s": "t",
         "u": "v",
         "x": "z"]

এটি সম্ভবত এটির কারণ ঠিক করা উচিত:

var a = NSMutableDictionary()
a["a"] = "b"
a["c"] = "d"
... and so on

4

ডিবাগ এবং পরীক্ষার জন্য, কমপাইল সময়টি প্রায় 20 মিনিট থেকে 2 মিনিটেরও কম কাটাতে নিম্নলিখিত সেটিংসটি ব্যবহার করে নিশ্চিত করুন,

  1. প্রকল্পের বিল্ড সেটিংসে, "অপ্টিমাইজেশন" সন্ধান করুন ডিবাগটিকে "দ্রুততম [-O3]" বা তারপরে পরিণত করুন Turn
  2. অ্যাক্টিভ আর্কিটেকচারের জন্য বিল্ড সেট করুন: হ্যাঁ
  3. ডিবাগ তথ্য ফর্ম্যাট: DWARF
  4. পুরো মডিউল অপ্টিমাইজেশন: কোন

আমি প্রকল্পটি নির্মাণের অপেক্ষায় অগনিত সময় নষ্ট করেছিলাম কেবল বুঝতে পেরে যে আমাকে এই সামান্য পরিবর্তন করতে হবে এবং এটি পরীক্ষা করার জন্য আরও 30 মিনিট অপেক্ষা করতে হয়েছিল। এই সেটিংস আমার জন্য কাজ করে। (আমি এখনও সেটিংস নিয়ে পরীক্ষা নিরীক্ষা করছি)

তবে, নিশ্চিত হয়ে নিন যে আপনি কমপক্ষে "ডিএসওয়াইএম দিয়ে ডিয়ারওয়্যার" সেট করেছেন (আপনি যদি নিজের অ্যাপ্লিকেশনটি পর্যবেক্ষণ করতে চান) এবং আইটিউনস কানেক্টে চাপ দেওয়ার জন্য রিলিজ / আর্কাইভের জন্য সক্রিয় আর্কিটেকচার তৈরি করুন (আমি এখানে কয়েক ঘন্টা নষ্ট করার কথা মনে করি)।


4
আমি ভুল হতে পারি, তবে কি অপেক্ষাকৃত উন্নত স্তর স্থাপনের ফলে বিল্ড সময়টি বাড়ানো হবে না? অপ্টিমাইজেশন স্তরগুলি রানটাইম কর্মক্ষমতা উন্নত করবে।
মাইকেল জলপ্রপাত 16

1
Set Build for Active Architecture: YESসংকলন সময় আমাকে প্রায় 45% হ্রাস দিয়েছে। অনেক ধন্যবাদ.
জিন লে মাইগানান

4

সংকলক প্রকারভেদ করতে এবং পরীক্ষা করতে প্রচুর সময় ব্যয় করে। সুতরাং প্রকারের টীকা যুক্ত করা সংকলককে অনেক সাহায্য করে।

আপনার যদি চেইন ফাংশন প্রচুর কল থাকে

let sum = [1,2,3].map({String($0)}).flatMap({Float($0)}).reduce(0, combine: +)

তারপরে সংকলকটি কী ধরণের হবে তা নির্ধারণ করতে কিছুটা সময় নেয় sum। প্রকারটি যুক্ত করা সাহায্য করে। যা অন্তর্ভুক্ত পদক্ষেপগুলি পৃথক ভেরিয়েবলগুলিতে টানছে তাও সহায়তা করে।

let numbers: [Int] = [1,2,3]
let strings: [String] = sum.map({String($0)})
let floats: [Float] = strings.flatMap({Float($0)})
let sum: Float = floats.reduce(0, combine: +)

বিশেষ করে সাংখ্যিক ধরনের জন্য CGFloat, Intএটি একটি অনেক সাহায্য করতে পারেন। একটি আক্ষরিক সংখ্যা 2অনেকগুলি বিভিন্ন সংখ্যার প্রকারের প্রতিনিধিত্ব করতে পারে। সুতরাং সংকলকটি কোনটি প্রসঙ্গে তা নির্ধারণ করতে হবে।

সন্ধান করতে অনেক সময় নেয় এমন +ফাংশনও এড়ানো উচিত। বেশ +কয়েকটি অ্যারে যুক্ত করতে কয়েকটি ব্যবহার করা ধীর কারণ সংকলকটির +প্রতিটিটির জন্য কোন প্রয়োগটি ডাকা উচিত তা নির্ধারণ করা দরকার +। এর পরিবর্তে একটি সম্ভব ব্যবহারের var a: [Foo]সাথে ব্যবহার করুন append()

এক্সকোডে কোন ফাংশনগুলি সংকলন করতে ধীরে ধীরে তা সনাক্ত করতে আপনি একটি সতর্কতা যুক্ত করতে পারেন ।

ইন সেটিংস বিল্ড জন্য আপনার টার্গেট অনুসন্ধানের জন্য অন্য সুইফট পতাকা এবং অ্যাড

-Xfrontend -warn-long-function-bodies=100

সংকলন করতে 100 এমএসের বেশি সময় নেয় এমন প্রতিটি ক্রিয়াকলাপের জন্য সতর্ক করতে।


4

প্রকল্পের মিশ্রিত করা উদ্দেশ্য সি এবং সুইফট কোড জন্য, আমরা সেট করতে পারেন -enable-bridging-pchমধ্যে Other Swift Flags। এটির সাহায্যে ব্রিজিং শিরোনামটি কেবল একবার পার্স করা হয় এবং ফলাফল (একটি অস্থায়ী "প্রাকম্পম্পাইল শিরোনাম" বা "পিসিএইচ" ফাইল) ক্যাশে হয় এবং লক্ষ্যটির সমস্ত সুইফ্ট ফাইল জুড়ে পুনরায় ব্যবহার করা হয়। অ্যাপল দাবি করেছে যে এটি নির্মানের সময় 30% কমেছে। রেফারেন্স লিংক:

দ্রষ্টব্য: এটি কেবল সুইফট ৩.১ এর জন্য কাজ করে।


2

আমার ম্যাকটি রিবুট করা এই সমস্যার জন্য বিস্ময়কর কাজ করেছে। আমি 15 মিনিটের বিল্ডগুলি থেকে 30 সেকেন্ড বিল্ডে চলেছি কেবল রিবুট করে।


1

নতুন এক্সকোড 6.3-এ সুইফ্ট সংকলনের সময়টি উন্নত করা হয়েছিল

সংকলক উন্নতি

সুইফট ১.২ সংকলকটি আরও স্থিতিশীল হতে এবং প্রতিটি উপায়ে কর্মক্ষমতা উন্নত করতে ইঞ্জিনিয়ার হয়েছিল। এক্সকোডে সুইফ্টের সাথে কাজ করার সময় এই পরিবর্তনগুলি আরও ভাল অভিজ্ঞতা সরবরাহ করে। সর্বাধিক দৃশ্যমান উন্নতিগুলির মধ্যে কিছু রয়েছে:

বর্ধিত বিল্ড

পরিবর্তিত হয়নি এমন উত্স ফাইলগুলি আর ডিফল্টরূপে পুনরায় সংকলিত হবে না, যা বেশিরভাগ সাধারণ ক্ষেত্রে বিল্ড টাইমগুলিতে উল্লেখযোগ্যভাবে উন্নতি করবে। আপনার কোডে বড় স্ট্রাকচারাল পরিবর্তনগুলির জন্য আবার একাধিক ফাইল পুনর্নির্মাণের প্রয়োজন হতে পারে।

দ্রুত এক্সিকিউটেবল

ডিবাগ বাইনারিগুলি উত্পাদন করে যা যথেষ্ট দ্রুত চলে এবং নতুন অনুকূলকরণ আরও ভাল রিলিজ বিল্ড পারফরম্যান্স সরবরাহ করে।

আরও ভাল সংকলক ডায়াগনস্টিক্স

নতুন ফিক্স-এর সাথে আরও পরিষ্কার ত্রুটি এবং সতর্কতা বার্তা যথাযথ সুইফট ১.২ কোড লিখতে সহজ করে easier

স্থিতিশীলতা উন্নতি

সর্বাধিক সাধারণ সংকলক ক্র্যাশগুলি ঠিক করা হয়েছে। এক্সকোড সম্পাদকের মধ্যে আপনার কম সোর্সকিট সতর্কতাও দেখতে হবে।


0

এখানে আরও একটি মামলা রয়েছে যা প্রকারের অনুক্রমের সাথে ব্যাপক ধীরগতির কারণ হতে পারে। Coalescing অপারেটর

লাইনগুলি পরিবর্তন করা হচ্ছে:

abs(some_optional_variable ?? 0)

প্রতি

abs((some_optional_variable ?? 0) as VARIABLE_TYPE)

আমার সংকলনের সময় 70 এর দশক থেকে 13 এর দশকে আনতে সহায়তা করেছে


0

এক্সকোড .3.৩.১ তে আমার পক্ষে কিছুই কাজ করেনি - যখন আমি প্রায় 100 টি সুইফ্ট ফাইল যুক্ত করি তখন এক্সকোড এলোমেলোভাবে বিল্ড এবং / বা সূচীতে ঝুলিয়ে দেওয়া হয়। আমি কোনও সফলতা ছাড়াই একটি মডুলার বিকল্প চেষ্টা করেছি।

এক্সকোড 6.4 বিটা ইনস্টল করা এবং ব্যবহার করা আসলে আমার পক্ষে কাজ করেছিল।


0

এটি আমার জন্য যাদুটির মতো কাজ করছে - স্পিড আপ সুইফ্ট সংকলন । এটি সংকলনের সময়টি 10 ​​মিনিট থেকে 3 মিনিটে হ্রাস করেছে।

এরা বলছে আপনি চালু করা উচিত Whole Module Optimizationযখন যোগ -Ononeমধ্যে Other Swift Flags

আমি ব্যবহার করছি Swift 3উপর Xcode 8.3/Xcode 8.2


0

একপ্রকাশে পূর্ণসংখ্যার আক্ষরিক এবং ভাসমান আক্ষরিক মিশ্রণও দীর্ঘ সংকলনের সময় ঘটায়।

1.0 + (1.0 + (1  * (1.0 + 1.0))) // 3429ms

1.0 + (1.0 + (1.0  * (1.0 + 1.0))) // 5ms

আমি .0পূর্ণসংখ্যার পরে শাব্দিক রাখার পরে অনেক 1000 + এমএসের সংকলন-সময় এক্সপ্রেশনগুলি 10 ~ 100 মিলিয়ন হয়ে যায় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.