UIKit مقابل SwiftUI: أسباب اختيار UIKit لسرعة بدء التشغيل
هذه الصفحة مترجمة آليًا من الأصل الياباني. اقرأ الأصل الياباني
1. لماذا هو UIKit في 2026
Apple يؤكد على تطور SwiftUI في WWDC السنوي، ولم تعد راحة واجهة المستخدم الإعلانية مشكوك فيها.
ومع ذلك، يحتوي هذا التطبيق على متطلبات لا تضح. هو جعل Time-to-Text (الوقت من بدء التشغيل إلى إدخال النص) إلى 500ms أو أقل.
في SwiftUI، هناك نفقات عامة خاصة بإطار واجهة المستخدم، مثل تهيئة @StateObject، وإعادة تقييم body، والتحكم في توقيت .onAppear. يمكن تجاهلها في التطبيقات العامة، ولكن لا يمكن تجاهلها في المواقف التي يتم فيها متابعة التحسين في ميلي ثانية.
من ناحية أخرى، المسار الذي يستدعي becomeFirstResponder() من viewDidAppear في UIKit هو سريع بشكل حاسم. دورة حياة ViewController واضحة، ويمكنك التحكم بدقة في وقت عرض لوحة المفاتيح.
2. سبب القضاء تماما على القصة المصورة
لا يكفي اختيار UIKit. تحتوي القصة المصورة أيضا على النفقات العامة التي تؤثر على أداء بدء التشغيل.
- تكلفة تحليل XML:Storyboard هو ملف XML داخلي ويجب تحليله عند بدء التشغيل
- تكلفة دقة Segue:يستغرق الأمر بعض الوقت لحل إعداد Segue للانتقال إلى الشاشة
- تعقيد غير ضروري:أدوات التصميم المرئي للوحة القصة المصورة مفرطة لتطبيقات المذكرة البسيطة
، تم اعتماد طريقة إنشاء ViewController مباشرة باستخدام SceneDelegate.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
PerformanceLogger.shared.signpostBegin(name: "SceneConnect")
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(windowScene: windowScene)
let composeVC = ComposeViewController()
let navController = UINavigationController(rootViewController: composeVC)
window.rootViewController = navController
window.makeKeyAndVisible()
PerformanceLogger.shared.signpostEnd(name: "SceneConnect")
}
يحقق هذا النهج انعدام وقت تحليل Storyboard ووقت حل Segue. بإنشاء ComposeViewController مباشرة من SceneDelegate، أُزيلت المعالجة غير الضرورية بالكامل من مسار بدء التشغيل.
3. خط عرض 1DidAppear يكمل كل شيء
أكبر قوة ل UIKit هي أن دورة حياة ViewController محددة بوضوح. عند استدعاء viewDidAppear(_:)، يتم عرض العرض بالكامل على الشاشة. من خلال الاتصال ب becomeFirstResponder() في هذا الوقت المحدد، يمكنك تقليل التأخير حتى عرض لوحة المفاتيح.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
activateTextInput()
}
private func activateTextInput() {
textView.becomeFirstResponder()
PerformanceLogger.shared.endTimeToText()
}
يتم قياس os_signpost بدقة نانو ثانية. يسجل PerformanceLogger.shared.endTimeToText() حدث إنهاء اللافتات ويتيح التحليل التفصيلي في الأدوات.
4. آلية قياس الأداء
يتم اتخاذ قرارات التصميم بناء على البيانات الكمية، وليس الحكم الحسي "السريع".
- PerformanceLogger:مسجل مخصص ملفوف ب
os_signpost. قم بقياس كل مرحلة من مراحل بدء التشغيل والإرسال وتحديث واجهة المستخدم - تعاون الأدوات:تتبع دقة Nanosecond ممكن باستخدام أداة os_signpost من Xcode
- المقاييس الرئيسية:الوقت إلى النص (ابدأ → الإدخال ممكن)، إرسال إلى إعادة تعيين (زر إرسال → تهيئة واجهة المستخدم)
- المراقبة المستمرة:يتم إجراء قياس الأداء على جميع الإنشاءات قيد التطوير ويكتشف الانحدار على الفور
الأداء هو وظيفة. حتى لو لم يطلب المستخدمون صراحة "السرعة"، فلن يتم استخدام التطبيقات البطيئة دون وعي. لهذا السبب من المهم الاستمرار في إدارة الأداء عدديا.
5. هل هناك موقف يتم فيه استخدام SwiftUI؟
UIKit ليس الخيار الوحيد. هناك بعض المواقف في التطبيق حيث يكون SwiftUI مناسبا.
- شاشة الإعداد: على شاشة غير حرجة لا تؤثر على سرعة بدء التشغيل، تزيد واجهة المستخدم الإعلانية ل SwiftUI من الإنتاجية
- تعريف المسار الحرج:ابدأ → أدخل الملاحظات → إرسال يتم الحفاظ على التدفق الأساسي بواسطة UIKit
- التعقيد الهجين:يتطلب خلط UIKit وSwiftUI الاهتمام باتساق إدارة UIHostingController وتدفق البيانات
- الحكم في الوقت الحالي:واجهة المستخدم لتطبيق المذكرة بسيطة، ومن الأفضل توحيدها باستخدام UIKit بملء الشاشة للحفاظ على اتساق قاعدة التعليمات البرمجية
إذا تم تحسين أداء SwiftUI بشكل أكبر في المستقبل، فهناك مجال لإعادة التقييم، ولكن سيتم الحفاظ على المسار الحرج UIKit في الوقت الحالي.
الأسئلة الشائعة
@StateObjectوbody تؤدي إعادة تقييمه إلى معالجة إضافية. في هذا التطوير الذي يستهدف السرعة، اخترنا UIKit لإمكانية التحكم الدقيق في دورة الحياة. لم يكن هذا الاختيار نتيجة قياس الإطارين ومقارنتهما في الظروف نفسها.os_signpostوتحليله باستخدام الأدوات.المراجع
- مطور Apple — وثائق UIKit — الإشارة الرسمية إلى الإطار المستخدم في بناء واجهة المستخدم ل SimpleMemo
- مطور Apple - وثائق SwiftUI - إطار واجهة مستخدم إعلاني تمت مقارنته. موضوع قياس الأداء
- مطور Apple — os_signpost / OSSignposter — قياس الأداء المرتبط بالأدوات المستخدم لقياس الوقت إلى النص API
- WWDC 2023 - التحليل معلق مع الأدوات - جلسة WWDC كمرجع لتحسين استجابة واجهة المستخدم