سؤال

الوقوع في مشكلة حيث JSF يملأ الجلسات.كان لدينا نظام تحطم في اليوم الآخر.إرسال كومة IBM للمراجعة وجدت أن لدينا بعض الجلسات كبيرة مثل 50M.وجدوا JSF المكونات في الدورة وبعض كبيرة جدا.

هل هناك أي ضبط هذا يمكن القيام به ؟ عناصر التكوين أن ننظر ؟ أو الاتجاه الآخر.

لدينا نظام بناء باستخدام JSF و الربيع لعرض طبقة الخلفية هو EJB ، الربيع و السبات كل يعمل على WebSphere 6.1.

هل كانت مفيدة؟

المحلول

JSF هو مفيد التكنولوجيا ، ولكن يمكنك بالتأكيد شنق نفسك بها.

يبدو أنك إما تضخيم حجم عرض الدولة (من خلال تحديد قيم كبيرة على مكونات) أو كنت تسريب إشارات إلى مكونات أخرى في الدورة الدولة (والتي ستكون سيئة).آخر محتمل الجاني قد تكون كبيرة بشكل مفرط عرض (رأيت السهولة التي يمكن للناس أن بناء واجهة المستخدم الأشجار تؤدي إلى كبيرة جدا مراقبة الرسوم البيانية مع جداول البيانات في كل مكان).وأنا أعلم أن IBM توفر النص الغني و جدول الضوابط - لا أستطيع التعليق على ما تأثير استخدام هذه على حجم الدولة.

منخفضة شنقا الفاكهة للتحقق تمكنت الفاصوليا تكوين الدورة في نطاق faces-config.xml.

JSF يحفظ أمرين بين الطلبات:

  • عرض (جميع عناصر التحكم على الصفحة)
  • عرض الدولة (دولة الضوابط)

هذه هي مفصولة لأن بعض الضوابط ، مثل الأطفال من جدول البيانات ، يمكن أن يكون العديد من الدول (واحد لكل صف).يمكن حفظ الدولة إما حقل مخفي على شكل (والتي ، إذا كانت غير مشفرة ، يمكن أن تكون أمنية كبيرة الخطر) أو في الدورة.من أجل استيعاب متصفح متعدد النوافذ تقاسم نفس الدورة (و في بعض التطبيقات ، زر العودة الدعم) ، وجهات نظر متعددة يتم تخزينها.

  • يجب أن يكون هناك تكوين الخيار لتعيين عدد من وجهة نظر الولايات التطبيق سوف تبقى في الدورة لمستخدم معين في أي وقت.
  • يمكنك قياس حجم نظر الدولة من خلال توفير StateManager الذي يقيس حجم طريقة العرض المحفوظة/الدولة (تكوين StateManager في faces-config.xml مع منشئ العام أن يأخذ StateManager - انظر JSF المواصفات ملفات pdf لمزيد من التفاصيل ؛ الدولة تسلسل و يمكنك التحقق من حجمها قبل إلقائها إلى تيار).

معظم IDE بنيت JSF تطبيقات النسخ الفول.سيكون من الممكن عن طريق الدورة فول نطاق التمسك الدولة أطول مما تريد ، مما يضع ضغطا على الدورة.بما أنه يميل إلى أن يكون أحد النسخ الفول في الصفحة الواحدة أكثر الصفحات لديك ، اكبر مشكلة سوف يكون.تحقق faces-config.xml لمعرفة ما إذا كان هذا هو مصدر محتمل من المشاكل.

شيء آخر يمكن القيام به سيكون لتكوين HttpSessionAttributeListener في web.xml.يمكنك الحصول على تتبع المكدس للمساعدة في تحديد المناطق المشكلة في التطبيق الخاص بك.

نصائح أخرى

وهذا هو النظام الثاني سمعت من الذي مات بسبب JSF وإنشاء الكائن المفرط. يستخدم الآخر أيضا الربيع وإسبات في النهاية الخلفية. أظهر التنميط مع OptimizeIt أن الاستجابة كانت الخلفية بناء على أمر من ميلي ثانية لجميع الطلبات، ولكن هل يمكن أن وقت عرض المتصفح مرة أخرى مع ساعة توقيت لأنه استغرق وقتا طويلا - 30 ثانية تصل إلى عدة دقائق. كانت الذاكرة التي يستهلكها العميل مثير للسخرية.

وكنت فقط مراقب، وليس عضوا في أن فريق المشروع. سآخذ أن نسأل إذا تم إصلاح المشكلة من أي وقت مضى، وإذا كان الأمر كذلك، فما الحل ربما كان.

ولكن إذا جعل نقطتين الاتجاه، أود أن أقول أن JSF قد تكون معيبة قاتلة. شخصيا، أود البقاء بعيدا عن ذلك تماما.

لماذا لا نحاول الأمامية الربيع على شبكة الإنترنت ومعرفة ما اذا كان ذلك يساعد؟ إذا كنت تتبع لغة الربيع، ينبغي أن يكون مسألة بسيطة نسبيا استبدال JSF مع وحدات JSP أساس JSTL والتحكم الربيع.

وكنت أعمل على مشروع JSF وجدت أن كان لدينا خلل فيها أضفنا متعددة JSF ح: عناصر النموذج. مما أدى إلى نسخة من حالة العرض بأكمله يتم تضمينها مع كل شكل. قطع أسفل إلى 1 الشكل في الصفحة محلوق صفحات من ~ 2M الى ~ 300K.

وقد تكون قيد التشغيل في القضايا مع الكثير من دعم الفاصوليا كما نطاق الدورة.

هل يمكن أن تحاول النظر في MyFaces أوركسترا . هذا هو المكتبة التي توفر نطاق محادثة، وذلك بمجرد مستخدم قد انتهت مع مجموعة معينة من الفاصوليا ستتم إزالتها من الدورة.

وأنا أفهم أن الربيع WebFlow لديها ميزات مشابهة ولكن أنا لم ينظر حقا في ذلك!

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

ومات.

إذا كنت تستخدم MyFaces <1.1.6 هناك تسرب للذاكرة ضخمة في الطريقة التي تخزين جهات النظر المتسلسلة القديمة في الدورة فعال أبدا السماح لهم الافراج حتى أنها يمكن أن تكون القمامة التي تم جمعها. كان لي مشكلة خطيرة مع ذلك، وكانت لدينا جلسات 50MB كذلك. ترقية سريعة من MyFaces تصحح المشكلة دون أي مشاكل.

وتكوين persistense الجلسة إلى قاعدة البيانات، وأنها سوف تستخدم خوارزمية الأقل استخداما لدفع جلسات الأقل استخداما من الذاكرة. لديها عالية الأداء (عند تكوين بشكل صحيح) وسوف تساعدك على concretically وسريعة.

وقليلا من موضوع قديم، ولكن جاء عبر هذا مؤخرا. في كثير من الأحيان، يتم تخزين عرض وحالة العرض (كما ذكر سابقا)، وتملأ الدورة للسماح الزر الخلفي للعمل. وهناك معايير لفرز هذا في اصفات النشر الخاص بك (web.xml) التي تحتاج إلى أن توضع.

ومثيلات متعددة من بعض المكتبات قد يحتاج إعداد المعلمة أكثر من واحد، مثل عند استخدام MyFaces وJSF RI. افتراضيا، فإنها يمكن تعيين بعض قيم عالية جدا (20 و 16 على ما أعتقد، على التوالي). هذا يعني أنه يمكنك أن تستخدم 20 أضعاف المساحة التي يجب أن يكون ل(أجزاء من؟) الدورة.

ونصائح JSF ضبط للبيئة الإنتاج:
 - يجب أن يتم استخدام الصور، CSS، وجافا سكريبت الموارد بالسمات HTML القياسية (img,link,script) لا خادم الجانب، وتأكد من تعيين #{request.contextPath} قبل رابط لتجنب المشاكل المسارات النسبية
.  - أقسام ثابتة ذاكرة التخزين المؤقت لل(menu,header,footer) الصفحة باستخدام omnifaces cache
 - مجموعة refresh-period متغير إلى -1
 - مجموعة project-stage لإنتاج
 - مراجعة مرشحات الشفرة إن وجدت

وبالإضافة إلى ذلك، تحقق مقالتي " خادم جافا وجوه في الحقيقي تطبيقات الحياة "على DZone، وسوف تعطيك الصورة كاملة عن JSF في بيئات التطوير والاختبار والإنتاج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top