سؤال

كيف يمكنني قياس المدة التي يجب على العميل انتظار الطلب فيها؟

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

هل من الممكن الوصول إلى المقبس الأساسي لمعرفة متى ينتهي الطلب؟أم أنه من الضروري القيام ببعض الحيل جافا سكريبت؟ربما من خلال مزامنة الساعة بين المتصفح والخادم؟هل هناك أي جافا سكريبت معدة لهذه المهمة؟

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

المحلول

لا توجد طريقة يمكنك من خلالها معرفة المدة التي كان على العميل انتظارها من جانب الخادم فقط.ستحتاج إلى بعض جافا سكريبت.

أنت لا ترغب في مزامنة ساعات العميل والخادم، فهذا مبالغة.ما عليك سوى قياس الوقت بين وقت قيام العميل بتقديم الطلب ووقت انتهاء عرض استجابته.

إذا كان العميل هو AJAX، فقد يكون ذلك سهلاً جدًا:استدعاء Date().getTime() الجديد للحصول على الوقت بالمللي ثانية عند تقديم الطلب، ومقارنته بالوقت بعد تحليل النتيجة.ثم أرسل معلومات التوقيت هذه إلى الخادم في الخلفية.

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

نصائح أخرى

إذا كنت تريد قياسه من متصفحك لمحاكاة أي طلب عميل، فيمكنك مشاهدة علامة التبويب net في firebug لمعرفة المدة التي يستغرقها تنزيل كل جزء من الصفحة وترتيب التنزيل.

يمكنك التفاف كائن HttpServletResponse وOutputStream الذي تم إرجاعه بواسطة HttpServletResponse.عندما يبدأ الإخراج في الكتابة، يمكنك تعيين تاريخ البدء، وعندما يتوقف (أو عندما يتم مسحه وما إلى ذلك) يمكنك تعيين تاريخ التوقف.

يمكن استخدام هذا لحساب طول الوقت المستغرق لتدفق كافة البيانات مرة أخرى إلى العميل.

نحن نستخدمه في تطبيقنا وتبدو الأرقام معقولة.

يحرر:يمكنك ضبط تاريخ البدء في ServletFilter للحصول على المدة الزمنية التي انتظرها العميل.لقد أعطيتك المدة الزمنية التي تستغرقها كتابة المخرجات إلى العميل.

يمكنك تعيين مخزن مؤقت لإرسال مأخذ توصيل بحجم 0 بايت (وأنا لا أوصي بذلك تمامًا) بحيث يكون لديك فكرة أقرب عن وقت بقاء البايت الأخير عند اتصالك بالحظر إلى HttpResponse.send()، ولكن لم يتم تضمين وقت السفر . إيك--أشعر بالانزعاج لمجرد ذكر ذلك.يمكنك القيام بذلك في Tomcat باستخدام الإعدادات الخاصة بالموصل.(وثائق موصل Tomcat 6)

أو يمكنك التوصل إلى نوع من أسلوب الطابع الزمني لجافا سكريبت، لكنني لا أتوقع ضبط ساعة العميل.يجب إجراء مكالمات متعددة إلى خادم الويب.

  • استعلام الطابع الزمني
  • الطلب الحقيقي
  • الإبلاغ عن البيانات

وهذا النهج من شأنه أن يغطي زمن الوصول، على الرغم من أنه لا يزال لديك بعض التباين في الارتعاش.

هممم...مشكلة مثيرة للاهتمام لديك هناك.:)

الدفع جيفي ويب, ، تم تطويره بواسطة netflix لمنحهم عرضًا أكثر دقة لإجمالي الصفحة -> وقت عرض الصفحة

كان لي نفس المشكلة.لكن هذا ورقة جافا وان ساعدني حقا في حل هذه المشكلة.أود أن أطلب منك متابعة ذلك ويستخدم بشكل أساسي جافا سكريبت لحساب الوقت.

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