আমাদের একই সমস্যা ছিল এবং আমরা এটি ঠিক করেছি। দুবার।
বর্ধিত বিল্ড (একই বিল্ড মেশিন):
আগে: m 10m পরে: ~ 35s
কীভাবে?
প্রথমে আমাদের অভিজ্ঞতা দিয়ে শুরু করা যাক। আমাদের একটি বিশাল সুইফট / ওবজে-সি প্রকল্প ছিল এবং এটিই ছিল মূল উদ্বেগ: বিল্ডিংয়ের সময়গুলি ধীর ছিল এবং একটি নতুন বৈশিষ্ট্য (আক্ষরিক) বাস্তবায়নের জন্য আপনাকে একটি নতুন প্রকল্প তৈরি করতে হয়েছিল। নিখরচায় সিনট্যাক্স হাইলাইট করার জন্য বোনাস পয়েন্ট।
তত্ত্ব
সত্যিকার অর্থে এটি সমাধান করতে আপনাকে বিল্ড সিস্টেম কীভাবে কাজ করে তা সত্যই বুঝতে হবে । উদাহরণস্বরূপ, আসুন এই কোড স্নিপেট চেষ্টা করুন:
import FacebookSDK
import RxSwift
import PinLayout
এবং কল্পনা করুন যে আপনি আপনার ফাইলটিতে এই সমস্ত আমদানি ব্যবহার করেন। এবং এই ফাইলটি অন্য একটি ফাইলেও নির্ভর করে যা অন্য লাইব্রেরির উপর নির্ভর করে যা ফলস্বরূপ অন্য লাইব্রেরি ইত্যাদি ব্যবহার করে etc.
সুতরাং আপনার ফাইলটি সংকলনের জন্য এক্সকোডকে আপনার উল্লিখিত প্রতিটি লাইব্রেরি এবং প্রতিটি ফাইলের উপর নির্ভরশীল সংকলন করতে হবে, সুতরাং আপনি যদি কোনও "কোর" ফাইল পরিবর্তন করেন তবে এক্সকোডকে আক্ষরিকভাবে পুরো প্রকল্পটি পুনর্নির্মাণ করতে হবে।
এক্সকোড বিল্ডটি বহু-থ্রেডযুক্ত তবে এতে অনেকগুলি একক থ্রেডযুক্ত গাছ রয়েছে ।
সুতরাং প্রতিটি ইনক্রিমেন্টাল বিল্ডের প্রথম ধাপে এক্সকোড সিদ্ধান্ত নিচ্ছে কোন ফাইলগুলি পুনরায় সংকলন করতে হবে এবং একটি এএসটি ট্রি তৈরি করবে । আপনি যদি এমন কোনও ফাইল পরিবর্তন করেন যা অন্যান্য ফাইলগুলিতে " নির্ভরযোগ্য " হিসাবে কাজ করে, সুতরাং " নির্ভরশীল " হিসাবে কাজ করে এমন প্রতিটি ফাইল পুনরায় সংযুক্ত করতে হবে।
তাই প্রথম পরামর্শটি হ'ল কাপলিং কম করা । আপনার প্রকল্পের অংশগুলি একে অপরের থেকে স্বতন্ত্র থাকতে হবে।
ওবজে-সি / সুইফ্ট ব্রিজ
এই গাছগুলিতে সমস্যা যদি আপনি ওবজ-সি / সুইফ্ট ব্রিজ ব্যবহার করেন তবে এক্সকোডকে স্বাভাবিকের চেয়ে আরও বেশি পর্যায় অতিক্রম করতে হবে:
নিখুঁত পৃথিবী:
- ওবজে-সি কোড তৈরি করে
- সুইফট কোড তৈরি করুন
ওবজে-সি / সুইফট ব্রিজ:
- [পুনরাবৃত্তিযোগ্য পদক্ষেপ] ওবিজে-সি কোড সংকলনের জন্য প্রয়োজনীয় সুইফট কোড তৈরি করুন
- [পুনরাবৃত্তিযোগ্য পদক্ষেপ] ওবিজে-সি কোড তৈরি করুন, যা সুইফ্ট কোডটি সংকলনের জন্য প্রয়োজন
- আপনার অবিশ্বাস্য সুইফট ও ওবজে-সি কোড বাকি না হওয়া পর্যন্ত 1 এবং 2 পুনরাবৃত্তি করুন
- ওবজে-সি কোড তৈরি করুন
- সুইফট কোড তৈরি করুন
সুতরাং আপনি যদি পদক্ষেপ 1 বা 2 থেকে কিছু পরিবর্তন করেন তবে আপনি মূলত কোনও সমস্যায় রয়েছেন। সবচেয়ে ভাল সমাধান হ'ল ওবজে-সি / সুইফট ব্রিজটি হ্রাস করুন (এবং এটি আপনার প্রকল্প থেকে সরিয়ে দিন)।
আপনার যদি ওবজে-সি / সুইফ্ট ব্রিজ না থাকে তবে এটি দুর্দান্ত এবং আপনি পরবর্তী ধাপে যেতে ভাল:
সুইফট প্যাকেজ ম্যানেজার
সুইফ্ট পিএম এ যাওয়ার সময় (বা কমপক্ষে আপনার কোকোপডগুলি আরও ভালভাবে কনফিগার করা উচিত)।
কথাটি হ'ল, বেশিরভাগ ফ্রেমওয়ার্কগুলি ডিফল্ট কোকোপডস কনফিগারেশন সহ তাদের নিজের সাথে টানা অনেকগুলি জিনিস আপনার প্রয়োজন হয় না।
এটি পরীক্ষার জন্য খালি একটি পিনলয়েটের মতো নির্ভরতার সাথে একটি প্রকল্প তৈরি করুন উদাহরণস্বরূপ এবং কোকোপডস (ডিফল্ট কনফিগারেশন) এবং সুইফটপিএম সহ এই কোডটি লেখার চেষ্টা করুন।
import PinLayout
final class TestViewController: UIViewController {
}
স্পোলার: কোকোপডস এই কোডটি সংকলন করবে, কারণ কোকোপডগুলি পিনলয়আউট (ইউআইকিট সহ) এর প্রতিটি আমদানি আমদানি করবে এবং সুইফটপিএম এট্রিকভাবে ফ্রেমওয়ার্ক আমদানি করবে না because
ডার্টি হ্যাক
আপনি কি মনে করেন এক্সকোড বিল্ডটি বহু-থ্রেডযুক্ত?
ঠিক আছে, আপনি এটির অপব্যবহার করতে পারেন, যদি আপনি আপনার প্রকল্পটিকে অনেকগুলি স্বতন্ত্র টুকরোতে ভাগ করতে সক্ষম হন এবং সেগুলি আপনার প্রকল্পে স্বাধীন ফ্রেমওয়ার্ক হিসাবে আমদানি করতে পারেন। এটি সংশ্লেষকে কমিয়ে দেয় এবং এটিই ছিল প্রথম সমাধান যা আমরা ব্যবহার করেছি, তবে এটি আসলে খুব কার্যকর ছিল না, কারণ আমরা কেবল প্রথম পদ্ধতির তুলনায় কেবলমাত্র ইনক্রিমেন্টাল বিল্ড সময়কে ~ 4-5m কমাতে পারি যা কিছুই নয়।