تتبع التسلسلات الهرمية المعقدة لحالات إكمال المهام غير المتزامنة. يهدف هذا إلى إعطائك طريقة لتسجيل التقدم المحرز في عملية التوزيع التكراري الكبير وتجميع مسارات العمل الشائعة جدًا في حالة عدم التزامن والإبلاغ عنها.
إن ما تفعله ببيانات الإكمال هذه متروك لك، ولكن حالة الاستخدام الأكثر شيوعًا هي تغذيتها بإحدى وحدات شريط التقدم العديدة.
تتضمن معظم وحدات شريط التقدم إصدارًا أوليًا من هذا، لكن احتياجاتي كانت أكثر تعقيدًا.
var TrackerGroup = require ( "are-we-there-yet" ) . TrackerGroup
var top = new TrackerGroup ( "program" )
var single = top . newItem ( "one thing" , 100 )
single . completeWork ( 20 )
console . log ( top . completed ( ) ) // 0.2
fs . stat ( "file" , function ( er , stat ) {
if ( er ) throw er
var stream = top . newStream ( "file" , stat . size )
console . log ( top . completed ( ) ) // now 0.1 as single is 50% of the job and is 20% complete
// and 50% * 20% == 10%
fs . createReadStream ( "file" ) . pipe ( stream ) . on ( "data" , function ( chunk ) {
// do stuff with chunk
} )
top . on ( "change" , function ( name ) {
// called each time a chunk is read from "file"
// top.completed() will start at 0.1 and fill up to 0.6 as the file is read
} )
} )
تم التنفيذ في: Tracker
، TrackerGroup
، TrackerStream
إرجاع نسبة العمل المكتمل إلى العمل المطلوب إنجازه. نطاق من 0 إلى 1.
تم التنفيذ في: Tracker
، TrackerGroup
وضع علامة على المتعقب كمكتمل. مع TrackerGroup، يتم وضع علامة على جميع مكوناته على أنها مكتملة.
يضع علامة على جميع مكونات هذا المتعقب على أنها منتهية، وهو ما يعني بدوره أن tracker.completed()
لهذا سيكون الآن 1.
سيؤدي هذا إلى إصدار حدث change
واحد أو أكثر.
تُصدر جميع كائنات المتعقب أحداث change
باستخدام الوسائط التالية:
function (name, completed, tracker)
name
هو اسم المتتبع الذي أرسل الحدث في الأصل، أو إذا لم يكن لديه واحد، فهو أول مجموعة متتبع تحتوي على حدث.
completed
هو النسبة المئوية للاكتمال (كما تم إرجاعها بواسطة طريقة tracker.completed()
).
tracker
هو كائن التعقب الذي تستمع إليه للأحداث.
var Tracker = New TrackerGroup( name )
إنشاء مجموعة تجميع تعقب فارغة جديدة. هذه هي أدوات التتبع التي يتم تحديد حالة اكتمالها من خلال حالة اكتمال أجهزة التتبع الأخرى المضافة إلى مجموعة التجميع هذه.
السابق.
var tracker = new TrackerGroup ( "parent" )
var foo = tracker . newItem ( "firstChild" , 100 )
var bar = tracker . newItem ( "secondChild" , 100 )
foo . finish ( )
console . log ( tracker . completed ( ) ) // 0.5
bar . finish ( )
console . log ( tracker . completed ( ) ) // 1
Tracker.addUnit ( otherTracker ، الوزن )
يضيف المتتبع الآخر إلى مجموعة التجميع هذه. يحدد الوزن المدة التي تتوقع أن يستغرقها جهاز التعقب هذا لإكماله بما يتناسب مع الوحدات الأخرى. لذلك، على سبيل المثال، إذا أضفت جهاز تعقب بوزن 1 وآخر بوزن 2، فأنت تقول أن الثاني سيستغرق ضعف الوقت لإكماله مثل الأول. على هذا النحو، سيمثل الأول 33% من إكمال هذا المتعقب والثاني سيمثل 67% الأخرى.
إرجاع متعقب آخر .
ما ورد أعلاه يعادل بالضبط:
var subGroup = tracker . addUnit ( new TrackerGroup ( name ) , weight )
ما ورد أعلاه يعادل بالضبط:
var subItem = tracker . addUnit ( new Tracker ( name , todo ) , weight )
ما ورد أعلاه يعادل بالضبط:
var subStream = tracker . addUnit ( new TrackerStream ( name , todo ) , weight )
إرجاع شجرة توضح اكتمال مجموعة التعقب هذه وجميع العناصر التابعة لها، بما في ذلك الإدخال المتكرر لجميع العناصر التابعة لها.
var Tracker = New Tracker( name ، todo )
عادةً ما يتم إنشاؤها كجزء من مجموعة تعقب (عبر newItem
).
إرجاع نسبة العمل المكتمل إلى العمل المطلوب إنجازه. النطاق من 0 إلى 1. إذا كان إجمالي العمل المطلوب إنجازه هو 0، فسوف يُرجع 0.
Tracker.addWork( ما يجب عمله )
يزيد من حجم العمل المطلوب إنجازه، وبالتالي تقل نسبة الإنجاز. يطلق حدث change
.
Tracker.CompleteWork ( مكتمل )
زيادة حجم العمل المكتمل، وبالتالي زيادة نسبة الإنجاز. لن يزيد العمل المنجز أبدًا من حجم العمل الذي يجب القيام به. أي أن النسب المئوية > 100% غير مسموح بها. يطلق حدث change
.
عند وضع علامة على أداة التعقب هذه على أنها منتهية، ستصبح قيمة Tracker.Completed() الآن 1. يطلق حدث change
.
var Tracker = New TrackerStream ( الاسم والحجم والخيارات )
كائن دفق التعقب هو عبارة عن دفق تمرير يقوم بتحديث كائن تعقب داخلي في كل مرة تمر فيها الكتلة. الغرض منه هو تتبع التنزيلات واستخراج الملفات والأنشطة الأخرى ذات الصلة. يمكنك استخدامه عن طريق توصيل مصدر البيانات الخاص بك به ثم استخدامه كمصدر بياناتك.
إذا كانت بياناتك تحتوي على سمة طول، فسيتم استخدامها كمقدار العمل المكتمل عند تمرير القطعة. إذا لم يحدث ذلك (على سبيل المثال، تدفقات الكائنات) فسيتم احتساب كل قطعة على أنها إكمال وحدة عمل واحدة، لذلك يجب أن يكون حجمك هو إجمالي عدد الكائنات التي يتم تدفقها.
Tracker.addWork( ما يجب عمله )
يزيد من حجم العمل المطلوب إنجازه، وبالتالي تقل نسبة الإنجاز. يطلق حدث change
.