কিছু "সাধারণ" কোড টাইপ করার সময় আমি 100% + সিপিইউও অভিজ্ঞতা অর্জন করেছি। আপনি নিজের কোডটি কীভাবে গঠন করেছেন তার মাধ্যমে সুইফট-পার্সারটিকে আরও দ্রুত করার জন্য কয়েকটি ছোট কৌশল।
স্ট্রিংগুলিতে "+" কনগেটিনেটর ব্যবহার করবেন না। আমার জন্য এটি খুব শীঘ্রই আস্তে আস্তে ট্রিগার করে। প্রতিটি নতুন "+" পার্সারকে একটি ক্রল এনে দেয় এবং আপনার ফাংশন বডিটিতে কোথাও একটি নতুন চর যোগ করার সময় কোডটি প্রতিদ্বন্দ্বিত করতে হয়।
পরিবর্তে:
var str = "This" + String(myArray.count) + " is " + String(someVar)
দ্রুতগতিতে পার্স করার জন্য টেমপ্লেট-সিনট্যাক্সটি ব্যবহার করুন যা আরও কার্যকর:
var str = "This \(myArray.count) is \(someVar)"
এইভাবে আমি মূলত ইনলাইন ভার্স "\ (*)" এর সাথে স্ট্রেনের কোনও সীমা লক্ষ্য করি না।
আপনার যদি গণনা থাকে, যা + / * ব্যবহার করে - তবে এগুলি ছোট ছোট ভাগে ভাগ করুন।
পরিবর্তে:
var result = pi * 2 * radius
ব্যবহার করুন:
var result = pi * 2
result *= radius
এটি কম দক্ষ দেখায়, তবে এইভাবে সুইফ্ট পার্সারটি আরও দ্রুত। কিছু সূত্র সংকলন করবে না, যদি তাদের গাণিতিকভাবে সঠিক হয় তবে তাদের অনেকগুলি ক্রিয়াকলাপ করতে হবে।
আপনার যদি কিছু জটিল গণনা থাকে তবে এটি একটি মজাদার মধ্যে রাখুন। এইভাবে পার্সার একবার এটি বিশ্লেষণ করতে পারে এবং প্রতিবার আপনি নিজের ফাংশন শরীরে কোনও কিছু পরিবর্তন করলে প্রতিদ্বন্দ্বিতা করতে হবে না।
কারণ আপনার ফাংশন বডিটিতে যদি কোনও গণনা থাকে তবে প্রকারগুলি, বাক্য গঠন ইত্যাদি ঠিকঠাক থাকলে কোনওভাবেই সুইফ্ট পার্সার এটি পরীক্ষা করে। যদি গণনার উপরে কোনও লাইন পরিবর্তিত হয়, তবে আপনার গণনা / সূত্রের অভ্যন্তরে কিছু ভার পরিবর্তন হয়েছে। আপনি যদি এটি কোনও বাহ্যিক ফাংশনে রাখেন তবে এটি একবার যাচাই করা হবে এবং দ্রুত এটি সঠিক হবে এবং খুশি খুশি যে এটি সঠিক হবে এবং এটি ক্রমাগত পুনরুদ্ধার করে না, যা উচ্চ সিপিইউ ব্যবহারের কারণ করছে।
এই টাইপ করার সময় আমি প্রতিটি কীপ্রেসের 100% থেকে কম সিপিইউতে পৌঁছেছি। উদাহরণস্বরূপ, আপনার ফাংশন বডিটিতে এই 3 টি লাইন রাখলে সুইফট পার্সারটিকে একটি ক্রল এনে দেওয়া যায়।
let fullPath = "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"
let spacesData = NSDictionary(contentsOfFile: fullPath )! // as Dictionary<String, AnyObject>
let spaces : AnyObject = spacesData["SpacesDisplayConfiguration"]!["Management Data"]!!["Monitors"]!![0]["Spaces"]!!
println ( spaces )
তবে যদি আমি এটি একটি ফানক মধ্যে রাখি এবং পরে এটি কল করি তবে সুইফট পার্সারটি আরও দ্রুত
// some crazy typecasting here to silence the parser
// Autodetect of Type from Plist is very rudimentary,
// so you have to teach swift your types
// i hope this will get improved in swift in future
// would be much easier if one had a xpath filter with
// spacesData.getxpath( "SpacesDisplayConfiguration/Management Data/Monitors/0/Spaces" ) as Array<*>
// and xcode could detect type from the plist automatically
// maybe somebody can show me a more efficient way to do it
// again to make it nice for the swift parser, many vars and small statements
func getSpacesDataFromPlist() -> Array<Dictionary<String, AnyObject>> {
let fullPath = "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"
let spacesData = NSDictionary(contentsOfFile: fullPath )! as Dictionary<String, AnyObject>
let sdconfig = spacesData["SpacesDisplayConfiguration"] as Dictionary<String, AnyObject>
let mandata = sdconfig["Management Data"] as Dictionary<String, AnyObject>
let monitors = mandata["Monitors"] as Array<Dictionary<String, AnyObject>>
let monitor = monitors[0] as Dictionary<String, AnyObject>
let spaces = monitor["Spaces"] as Array<Dictionary<String, AnyObject>>
return spaces
}
func awakeFromNib() {
....
... typing here ...
let spaces = self.getSpacesDataFromPlist()
println( spaces)
}
সুইফ্ট এবং এক্সকোড 6.1 এখনও খুব বগি, তবে আপনি যদি এই সাধারণ কৌশলগুলি অনুসরণ করেন তবে সম্পাদনা কোডটি আবার গ্রহণযোগ্য হয়ে উঠবে। আমি অনেকটা দ্রুত অগ্রাধিকার দেব, কারণ এটি .h ফাইলগুলি থেকে মুক্তি পেয়ে অনেক ক্লিনার সিনট্যাক্স ব্যবহার করে। "অ্যানোবজেক্ট হিসাবে মাইভার" এর মতো এখনও অনেক ধরণের টাইপ-কাস্টিং প্রয়োজন, তবে জটিল উদ্দেশ্য-সি প্রকল্প কাঠামো এবং বাক্য গঠনটির তুলনায় ছোট অশুভ বিষয়টিকে বোঝায়।
এছাড়াও আরেকটি অভিজ্ঞতা, আমি স্প্রিটকিট চেষ্টা করেছিলাম, যা মজাদার, তবে এটি আপনার পক্ষে 60fps এ ধ্রুবক পুনর্নির্মাণের প্রয়োজন না হলে এটি বেশ দক্ষ। আপনার "স্প্রাইটস" যদি প্রায়শই এটি পরিবর্তন না করে তবে সিপিইউর জন্য পুরানো ক্যালায়ার্স ব্যবহার করা আরও ভাল। যদি আপনি স্তরগুলির। বিষয়বস্তু পরিবর্তন না করেন তবে সিপিইউ মূলত অলস, তবে যদি আপনার পটভূমিতে একটি স্প্রিটকিট অ্যাপ চলমান থাকে তবে হার্ড অ্যাপ্লিকেশন 60fps আপডেট-লুপের কারণে অন্যান্য অ্যাপ্লিকেশনগুলিতে ভিডিওপ্লেব্যাক তোলপাড় শুরু করতে পারে।
কখনও কখনও সংকলনের সময় এক্সকোড বিজোড় ত্রুটিগুলি দেখায়, তারপরে এটি "পণ্য> পরিষ্কার" মেনুতে যেতে এবং এটি আবার সংকলন করতে সহায়তা করে, মনে হয় এটি ক্যাশের একটি বগি বাস্তবায়ন বলে মনে হচ্ছে।
এক্সকোড আপনার কোডটি আটকে গেলে পার্সিংয়ের উন্নতি করার আরও একটি দুর্দান্ত উপায় এখানে অন্য একটি স্ট্যাকওভারফ্লো পোস্টে উল্লেখ করা হয়েছে । মূলত আপনি আপনার। সুইফট ফাইল থেকে সমস্ত বিষয়বস্তু একটি বাহ্যিক সম্পাদকে অনুলিপি করেন এবং তারপরে ফাংশন দ্বারা ফাংশন করে এটিকে আবার কপি করুন এবং দেখুন যেখানে আপনার বাধা আছে। আমার প্রকল্পটি 100% সিপিইউতে পাগল হওয়ার পরে এটি আসলে আমাকে আবার যুক্তিসঙ্গত গতিতে এক্সকোড পেতে সহায়তা করেছিল। আপনার কোডটি আবার অনুলিপি করার সময়, আপনি এটি রিফ্যাক্টর করতে পারেন এবং আপনার ফাংশন-বডিগুলি সংক্ষিপ্ত এবং ফাংশন / সূত্র / এক্সপ্রেশনগুলি সহজ (বা বেশ কয়েকটি লাইনে বিভক্ত) রাখার চেষ্টা করতে পারেন।