لماذا تقدم القضبان غير دقيقة؟
في البداية ، يبدو أن توليد تقدير دقيق للوقت يجب أن يكون سهلاً إلى حد ما. بعد كل شيء ، الخوارزمية التي تنتج شريط التقدم تعرف كل المهام التي تحتاجها للقيام بها في وقت مبكر ... صحيح?
بالنسبة للجزء الأكبر ، من الصحيح أن خوارزمية المصدر لا تعرف ما يجب القيام به في وقت مبكر. ومع ذلك ، فإن تحديد الوقت الذي سيستغرقه تنفيذ كل خطوة هو مهمة صعبة للغاية ، إن لم تكن مستحيلة.
لم يتم إنشاء كافة المهام متساوية
إن أبسط طريقة لتنفيذ شريط التقدم هو استخدام تمثيل رسومي من عداد المهام. حيث يتم حساب النسبة المئوية الكاملة ببساطة المهام المنجزة / العدد الإجمالي للمهام. في حين أن هذا يجعل المنطق منطقيًا في التفكير الأول ، فمن المهم أن نتذكر أنه (من الواضح) أن بعض المهام تستغرق وقتًا أطول لإكمالها.
النظر في المهام التالية التي يقوم بها المثبت:
- إنشاء بنية المجلد.
- تخفيف ضغط ونسخ 1 جيجابايت من الملفات.
- إنشاء إدخالات التسجيل.
- إنشاء إدخالات قائمة البداية.
في هذا المثال ، ستكتمل الخطوات 1 و 3 و 4 بسرعة كبيرة بينما تستغرق الخطوة 2 بعض الوقت. لذا فإن شريط التقدم الذي يعمل على حساب بسيط سوف يقفز إلى 25٪ بسرعة ، ويوقف قليلاً بينما تعمل الخطوة 2 ، ومن ثم يقفز إلى 100٪ على الفور تقريباً.
هذا النوع من التنفيذ شائع جدًا بين أشرطة التقدم لأنه ، كما هو مذكور أعلاه ، يسهل تنفيذه. ومع ذلك ، كما ترون ، فإنه يخضع لمهام غير متناسبة skapping فعلي نسبة التقدم من حيث صلتها بالوقت المتبقي.
للتغلب على هذا ، قد تستخدم بعض أشرطة التقدم بعض التطبيقات حيث يتم تقييم الخطوات. خذ بعين الاعتبار الخطوات أعلاه حيث يتم تعيين الوزن النسبي لكل خطوة:
- إنشاء بنية المجلد. [الوزن = 1]
- تخفيف ضغط ونسخ 1 جيجابايت من الملفات. [الوزن = 7]
- إنشاء إدخالات التسجيل. [الوزن = 1]
- إنشاء إدخالات قائمة البداية. [الوزن = 1]
باستخدام هذا الأسلوب ، يتحرك شريط التقدم بزيادات 10٪ (حيث أن إجمالي الوزن هو 10) مع خطوات 1 و 3 و 4 تحريك الشريط 10٪ عند الانتهاء والخطوة 2 تحريكه 70٪. على الرغم من أن هذا الأسلوب ليس مثاليًا ، فإن هذه الطريقة هي طريقة بسيطة لإضافة المزيد من الدقة إلى نسبة شريط التقدم.
النتائج السابقة لا تضمن الأداء المستقبلي
فكر في مثال بسيط لي يطلب منك العد إلى 50 بينما أستخدم ساعة توقيت لوقتك. لنفترض أنك تحتسب 25 في 10 ثوانٍ. سيكون من المعقول الافتراض أنك ستحسب الأرقام المتبقية في 10 ثوانٍ إضافية ، لذلك سيظهر شريط تقدم يتتبع هذا بنسبة 50٪ مع بقاء 10 ثوانٍ.
عندما تصل عدّك إلى 25 ، أبدأ رمي كرات التنس عليك. على الأرجح ، سيؤدي ذلك إلى كسر إيقاعك نظرًا لأن تركيزك قد انتقل من عد الأرقام بدقة إلى كرات المراوغة التي تتعرض لها. إذا افترضنا أنك قادر على الاستمرار في العد ، فإن وتيرة عملك قد تباطأت بالتأكيد. والآن ، لا يزال شريط التقدم يتحرك ، ولكن بوتيرة أبطأ بكثير مع الوقت المقدر المتبقي إما في حالة توقف تام أو ارتفاع فعليًا.
للحصول على مثال أكثر عملية من هذا ، فكر في تنزيل ملف. أنت تقوم حاليًا بتنزيل ملف بحجم 100 ميغابايت بمعدل 1 ميغابايت / ثانية. هذا من السهل جدا تحديد الوقت المقدر للانتهاء. ولكن 75٪ من الطريق إلى هناك ، وبعض حالات ازدحام الشبكة وانخفاض معدل التنزيل إلى 500 كيلوبايت / ثانية.
استنادًا إلى كيفية قيام المتصفح بحساب الوقت المتبقي ، يمكن أن ينتقل ETA على الفور من 25 ثانية إلى 50 ثانية (باستخدام الحالة الحالية فقط: حجم المتبقية / سرعة التحميل) أو ، على الأرجح ، يستخدم المتصفح خوارزمية متوسط المتداول والتي من شأنها ضبط التقلبات في سرعة النقل دون عرض قفزات مأساوية على المستخدم.
مثال لخوارزمية المتداول فيما يتعلق بتنزيل ملف قد يعمل شيء كالتالي:
- يتم تذكر سرعة النقل للثلاثين ثانية السابقة باستخدام القيمة الأحدث التي تحل محل الأقدم (على سبيل المثال ، تستبدل القيمة رقم 61 أول).
- معدل التحويل الفعال لغرض الحساب هو متوسط هذه القياسات.
- يتم حساب الوقت المتبقي على النحو التالي: حجم المتبقية / سرعة تحميل فعالة
لذا ، باستخدام سيناريونا أعلاه (من أجل البساطة ، سنستخدم 1 ميغابايت = 1،000 كيلوبايت):
- في 75 ثانية من التنزيل ، ستكون قيمنا الـ 60 المتغيرة 1000 كيلوبايت. معدل النقل الفعلي هو 1،000 كيلوبايت (60،000 كيلوبايت / 60) والتي تعطي الوقت المتبقي من 25 ثانية (25،000 كيلو بايت / 1،000 كيلو بايت).
- في 76 ثانية (حيث تنخفض سرعة النقل إلى 500 كيلوبايت) ، تصبح سرعة التنزيل الفعالة ~ 992 كيلوبايت (59،500 كيلوبايت / 60) والتي تعطي وقتًا متبقيًا من 24.7 ثانية تقريبًا (24،500 كيلوبايت / 992 كيلوبايت).
- في 77 ثانية: السرعة الفعالة = ~ 983 كيلوبايت (59،000 كيلوبايت / 60) العائد المتبقي من الوقت ~ 24.4 ثانية (24،000 كيلوبايت / 983 كيلوبايت).
- في 78 ثانية: السرعة الفعالة = 975 كيلوبايت (58،500 كيلوبايت / 60) العائد المتبقي من الوقت ~ 24.1 ثانية (23،500 كيلوبايت / 975 كيلوبايت).
يمكنك رؤية النمط الذي يظهر هنا حيث يتم دمج الانخفاض في سرعة التنزيل ببطء في المتوسط الذي يستخدم لتقدير الوقت المتبقي. بموجب هذه الطريقة ، إذا استمر الانخفاض لمدة 10 ثوانٍ فقط ثم عاد إلى 1 ميجابايت / ثانية ، فمن غير المرجح أن يلاحظ المستخدم الاختلاف (باستثناء وجود كشك صغير جدًا في الوقت المقدر للعد التنازلي).
الوصول إلى المسامير النحاسية - هذه ببساطة منهجية لنقل المعلومات إلى المستخدم النهائي للسبب الأساسي الفعلي ...
لا يمكنك تحديد بدقة شيء غير محدد
في نهاية المطاف ، فإن عدم دقة شريط التقدم يتلخص في حقيقة أنه يحاول تحديد وقت لشيء غير محدد. نظرًا لأن أجهزة الكمبيوتر تعالج المهام في كل من الطلب والخلفية ، فمن المستحيل تقريبًا معرفة موارد النظام المتوفرة في أي نقطة في المستقبل - وهي توفر موارد النظام اللازمة لإتمام أي مهمة..
باستخدام مثال آخر ، افترض أنك تقوم بتشغيل ترقية برنامج على خادم يقوم بتحديث قاعدة بيانات مكثفة إلى حد ما. أثناء عملية التحديث ، يقوم المستخدم بعد ذلك بإرسال طلب متطلب إلى قاعدة بيانات أخرى تعمل على هذا النظام. الآن ، تحتاج موارد الخادم ، خاصة لقاعدة البيانات ، إلى معالجة الطلبات الخاصة بكل من الترقية بالإضافة إلى طلب البحث الذي بدأه المستخدم - وهو سيناريو سيؤثر بالتأكيد على وقت التنفيذ. بالتناوب ، يمكن للمستخدم بدء طلب نقل ملف كبير والذي من شأنه أن يفرض ضرائب على سعة التخزين التخزينية التي من شأنها أن تقلل من الأداء أيضًا. أو قد تبدأ مهمة مجدولة تؤدي إلى تنفيذ عملية مكثفة للذاكرة. انت وجدت الفكرة.
كما ، ربما ، مثال أكثر واقعية للمستخدم اليومي - خذ بعين الاعتبار تشغيل Windows Update أو فحص الفيروسات. كل من هذه العمليات تؤدي عمليات مكثفة للموارد في الخلفية. ونتيجة لذلك ، يعتمد التقدم الذي يتم إحرازه على ما يفعله المستخدم في ذلك الوقت. إذا كنت تقرأ بريدك الإلكتروني أثناء تشغيل هذا ، فمن المرجح أن يكون الطلب على موارد النظام منخفضًا وسيتحرك شريط التقدم باستمرار. من ناحية أخرى ، إذا كنت تقوم بتحرير الرسومات ، فسيكون الطلب على موارد النظام أكبر بكثير مما سيؤدي إلى تحرك شريط التقدم ليكون مصابًا بالفصام.
وعموما ، هو ببساطة أنه لا يوجد كرة بلورية. ولا يعرف النظام نفسه ما سيكون عليه الحمل في أي وقت في المستقبل.
في نهاية المطاف ، حقا لا يهم
والقصد من شريط التقدم هو الإشارة إلى أنه يتم بالفعل إحراز تقدم ولم يتم تعليق العملية المعنية. من الجيد عندما يكون مؤشر التقدم دقيقًا ، ولكنه عادة ما يكون مجرد إزعاج بسيط عندما لا يكون كذلك. بالنسبة للجزء الأكبر ، لن يكرس المطورون الكثير من الوقت والجهد في خوارزميات شريط التقدم لأنه ، بصراحة ، هناك مهام أكثر أهمية لقضاء بعض الوقت على.
بالطبع ، لديك كل الحق في أن تضايق عندما يقفز شريط التقدم إلى 99 ٪ على الفور ، ثم يجعلك تنتظر 5 دقائق للواحد المتبقي. ولكن إذا كان البرنامج المعني يعمل جيدًا بشكل عام ، فما عليك سوى تذكير نفسك بأن المطور لديه أولوياته بشكل مستقيم.