WX_CHAT_YJ
لقد كنت أعمل في IM لفترة من الوقت ، وهذه المرة سجلت بعض المزالق التي واجهتها من قبل. سوف أشارك جزء الدردشة لاحقًا. آمل أن يكون ذلك مفيدًا للجميع. من بين المشاريع التي كنت أشاهدها عبر الإنترنت من قبل ، نادراً ما تحدثت عن مواجهة المزالق أثناء عملية التطوير. إذا كتبت دردشة لأول مرة ، فقد تواجه المزيد من المشكلات. هنا سأتحدث بشكل أساسي عن المزالق التي واجهتها. الجميع مرحب بهم لالتقاط الصور. من فضلك أعطني آراء مختلفة ، شكرا لك. الجميع يحقق التقدم معًا!
إذا كان مفيدًا لك ، تذكر النجوم!
وتشمل الوظائف الأساسية
التراجع ، الحذف ، نسخ الرسائل
صوت ، نص ، صور
عدد الأشخاص غير المقروقين
أنماط رسائل أخرى مخصصة في المشروع
في المشاريع الفعلية ، هناك قرص سحابي ، وتشغيل فيديو ، ودائرة الأصدقاء ...
1. ابدأ بالإطار
لقطة شاشة تشغيل المشروع


هيكل المشروع الأساسي


2. تستخدم قاعدة البيانات WCDB WeChat Open Source دون كتابة عبارة SQL.
3. واجهت بعض المزالق التالية
1. واجهة تأخر
- عند استخدام تخطيط الواجهة ، يتم استخدام حساب الارتفاع التلقائي لجهة خارجية في UitableView+... نظرًا لوجود العديد من أنماط الدردشة للمشروع ، يتم وضع الأنماط اليمنى واليسرى فقط عند استخدام تخطيط XIB ، ويتم التحكم في النمط عن طريق الاختباء والعرض. بسبب التطوير ، لم أستخدم الكثير من البيانات للاختبار ، الأمر الذي تسبب لي في تعثر الشديد عندما كان هناك الكثير من البيانات. كان الرئيس يتحدث عن كاكاكا ، الذي كان أكثر تعتأة من البقرة القديمة التي تسحب سيارة مكسورة. كان هذا النوع من التأتأة يشعر بوضوح عند تحريك الصفحة.
بعد العثور على سبب المشكلة ، الحل التالي:
أولاً ، احسب الارتفاع يدويًا وحل النزاعات في تصميم XIB. نعومة الصفحة المنزلق مقبولة. بالطبع ، قد يكون من الأفضل تحقيق تخطيط إطار ناعم أفضل.
في الوقت نفسه ، عندما يستخدم XIB تخطيط XIB ، حاول أن يكون لديك أقل قدر ممكن من المستويات. المزيد من المستويات سوف تؤثر على الطلاقة.
2. تأخر البيانات
- في البداية ، نظرًا لأننا شاركنا في معالجة عدد الأشخاص غير المقروقين لكل رسالة ، استبدلنا نموذج رسالة الدردشة الحالي من خلال الأرقام غير المقروءة من إيصال الخادم. عندما يصل عدد الثرثرة إلى مستوى معين ، سيقوم المزيد من الأشخاص بقراءة الأخبار. الإيصالات متكررة في هذا الوقت. عندما يعود الإيصال لتحديث بيانات معينة ، تأتي الواجهة مرة أخرى. خلال هذه العملية ، تتم معالجة غير المقروءة. هناك بعض المشاكل مع العميل. عند تحريك الصفحة ، أرسل رسالة غير مقروءة حاليًا إلى الخادم. يقوم الخادم بإرجاعه بنجاح للإشارة إلى أنه تمت قراءته. يتم وضع رسائل الخادم في قائمة الانتظار وتلقيها بشكل متكرر إلى الخادم. يتم دفع الخوادم بشكل متكرر للعملاء. هذا يتسبب في تحديث الصفحة لتكون متكررة للغاية. يتم عالقه على جانب عميلنا. (المشكلة في استبدال الرسائل في هذا الوقت هي العثور على البيانات التي سيتم استبدالها أثناء اجتياز الرسائل الحالي)
بعد العثور على السبب الجذري للمشكلة ، تم استخدام الطرق التالية لحلها:
- احفظ الرسائل التي ترسلها بشكل منفصل ، واستبدال الرقم غير المنفقي فقط لا يحتاج إلى استبدال الرسوم المرسلة حاليًا.
- وعند تحديد الارتفاع (heightforrowatindexpath) يضع موضع رسالة حالي في كل نموذج. عند استبدال الرسائل ، يمكنك القراءة بسرعة وإيجاد الرسالة المراد استبدالها حسب الحاجة. لا تكتب أبدًا هنا CellForrowatIndexPath لتحديد الموقع. خلاف ذلك ، سيكون عملية احتيال مرة أخرى.
يطل على الطريقة أعلاه يفي بشكل أساسي بالمتطلبات. ابحث فقط عن البيانات المراد استبدالها من الرسائل التي أرسلتها ، وتم تحديد الموقع. فقط استبدله مباشرة.
3. تأخر رسالة قراءة قاعدة البيانات
- في البداية ، استخدمنا FMDB.
- عند تخزين البيانات ، يتم تخزين بيانات النموذج مباشرة ، ويجد أنه عندما يكون هناك الكثير من البيانات ، فإنها تتعثر مرة أخرى. (لم نستخدمه جيدًا) أشعر بشكل أسرع عند الادخار ، لكن عندما قرأته ، تتعثر عندما أحصل على الكثير من البيانات. هناك صورة أخرى هنا ، وهي نقل الصورة إلى البيانات وحفظها. عند إدخال الصفحة لأول مرة ، إذا كان لديك عشرات الصور في صف واحد ، فيجب عليك الانتظار لفترة من الوقت عند النقر من الخارج. الخيط الرئيسي عالق.
سنحل المشكلة عندما نجدها:
- نستخدم WCDB WeChat Open Source لقاعدة البيانات ، والتي هي أكثر متعة في جميع الجوانب. لا حاجة لشكر عبارات SQL.
إذا قمت بحفظ النموذج ، فستحصل أيضًا على النموذج ، دون أي تأخر.
- لمعالجة الصور ، نستخدم الصورة إلى البيانات لتخزين صندوق الرمل ، ونستخدم حقول المفاتيح في عنوان الصورة ورسالة كمفاتيح لتخزين صندوق الرمل. في هذا الوقت ، تحتاج قاعدة البيانات فقط إلى تخزين العنوان. بناءً على المفتاح مثل هذا العنوان ، ابحث عن الصورة. بعد اختبار العشرات من الصور ، لم أشعر بذلك. هنا نحن فقط تخزين الصور التي نشرناها. صورة الطرف الآخر sdwebimageview محاكاة مؤقتًا. الغرض من تخزين المؤقتة الخاصة بك هو إرسالها لاستخدامها للمعالجة. هنا نستخدم ذاكرة التخزين المؤقت NSCACHE لمعالجة الرمز في الرمز ...
4. عندما تكون الصفحة مليئة بالتعبيرات ، فإنها عالقة
- بعد العلاج أعلاه ، يكون الطلاقة مقبولة بالفعل.
لكن ذات يوم ، نشر زميل الصفحة بأكملها ، والتي كانت مليئة بالتعبيرات على لوحة مفاتيح النظام ، وذهبت وعلقت مرة أخرى. كما نشر الزملاء الآخرون أنه كان كاكاكا ، وهو ما يمكن للجميع فهمه (بالإضافة إلى ذلك ، هناك موقف اختبار في شركتنا ، وهو أن الجميع يختبر نصف ساعة كل يوم من الاثنين إلى الجمعة ، ونصف ساعة في ليلة عطلة نهاية الأسبوع. المدرب وجميع الموظفين هناك). لأننا نستخدم uilable العادي دون أي معالجة.
هذا ما تذكرته من التقديم غير المتزامن ، مما يجعل الواجهة أكثر سلاسة وأكثر سلاسة. بعد الاستبدال ، زادت نعومة كثيرا.
5. أخبار ضائعة بجدية
- بعد إصدار الإصدار الأول من الدردشة ، اختبرها العديد من الأشخاص معًا. تم العثور على التسرب ليكون خطير جدا. بعد التحقيق ، نشأت مشاكل مهمة عندما كنا نخزن الأخبار.
- الحل الحالي:
- وفقًا للرسالة التي يدفعها المقبس ، طالما تم توصيل المقبس ، سيتم حفظه.
- وبعد تلقي الرسالة ، يتم إرجاعها إلى الخادم (يتلقى الخادم أكبر رسالة في الوقت الحالي عندما تكون الفاصل الزمني قصيرًا جدًا). إذا لم يكن هناك إيصال ، فسيدفع الخادم رسائل متعددة عند إرسال الرسائل ، وعليك ترتيب الأحمال الثقيلة بنفسك.
- علاوة على ذلك ، عندما تقوم الشبكة بتفكيك المقبس وإعادة الاتصال ، فإنها ستقوم أيضًا بسحب الرسائل ، مما يضمن البيانات بشكل فعال
6. تحدث عن تأخر الآلهة المتعددة
هنا نريد أن نجعل الآلهة من 9 أشخاص مثل dingtalk و WeChat. وعندما لا يكون هناك الصورة الرمزية ، يجب عرض الكلمة الأخيرة من الاسم على موقع الصورة الرمزية.
لقد استخدمت هنا 9 أزرار ، والتي يمكن استخدامها للصور والنص. اعتقدت أنه سيكون عالقًا عندما كان هناك الكثير من البيانات عندما كتبت ذلك ، لكن نتيجة لذلك ، قمت بحساب موضع ضبط الإطار بناءً على العدد الفعلي من الآلهة ، وأخفيت الأزرار التي لم تكن مطلوبة. بعد كتابة النتيجة. التأثير جيد جدا. الطلاقة يمكن أن تلبي المتطلبات. فقط قل أن هذه الصورة الرمزية كتبها ثلاثة أشخاص. يا هاي.
7. لا يزال المحتوى يجري تحسينه ...