تحسين أداء طريقة توقيت

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

// polyfill for window.performance.now
var performance = global.performance || {}
var performanceNow =
  performance.now        ||
  performance.mozNow     ||
  performance.msNow      ||
  performance.oNow       ||
  performance.webkitNow  ||
  function(){ return (new Date()).getTime() }

// generate timestamp or delta
// see http://nodejs.org/api/process.html#process_process_hrtime
function hrtime(previousTimestamp){
  var clocktime = performanceNow.call(performance)*1e-3
  var seconds = Math.floor(clocktime)
  var nanoseconds = Math.floor((clocktime%1)*1e9)
  if (previousTimestamp) {
    seconds = seconds - previousTimestamp[0]
    nanoseconds = nanoseconds - previousTimestamp[1]
    if (nanoseconds<0) {
      seconds--
      nanoseconds += 1e9
    }
  }
  return [seconds,nanoseconds]
}

function clock(start) {
    if ( !start ) return hrtime();
    var end = hrtime(start);
    return Math.round((end[0]*1000) + (end[1]/1000000));
}

module.exports = clock;

الاستخدام مستقيم للأمام: time = benchmark ()؛ لبدء العداد و time = benchmark (time)؛ لقياس المدة منذ المكالمة السابقة.

يتضمن هذا polyfill عند الحاجة إلى تشغيل التطبيق الخاص بي على المستعرض.

يبدو أن الدالة تعمل بشكل جيد ولكنه يؤثر بشدة (ومن المفارقات) على الأداء ، خاصة (ولا يثير الدهشة) في Internet Explorer.

كيف يمكنني جعله أسرع؟

0

1 إجابة

تفعل الكثير من الحسابات الإضافية ...

// polyfill for window.performance.now
var performance = global.performance || {}
var performanceNow =
  performance.now        ||
  performance.mozNow     ||
  performance.msNow      ||
  performance.oNow       ||
  performance.webkitNow  ||
  function(){ return (new Date()).getTime() }

function clock(start) {
    if ( !start ) return performanceNow();
    var end = performanceNow();
    return end - start;
}

module.exports = clock;

يجب أن يعطي هذا الرمز نفس النتائج. (تم حذف Math.round)

All methods (performance.now & Date.getTime) return time in milliseconds. As far as I understand it is expected output.

الأداء الآن في بعض المتصفحات (Chrome) قد يوفر لك وقتًا إضافيًا أقل من ميلي ثانية ، ثم تعاد القيمة ستكون غير

مثلا

> performance.now()
160693.10000000405

اختبر أيضًا أداء أساليب استرداد الوقت:

على الكروم وعلى جهاز الكمبيوتر الخاص بي Date.now() يعطي سرعة قصوى ، والإخراج الثلاثي من performance.now ()

see https://jsperf.com/get-time-3482/1

          Date.now    performance.now
Chrome    10 MOps      3.5 MOps
Safari    10 MOps      7   MOps

إذا قمت بإجراء عمليات تشغيل متعددة أو إذا قمت بقياس فترات زمنية كبيرة ، فقد لا تكون هناك حاجة إلى التوليف الإضافي للنانوثانية

ثم سوف ينتهي بك الأمر مع رمز IE9 +:

var now = Date.now;
function clock(start) {
    if ( !start ) return now();
    var end = now();
    return end - start;
}

module.exports = clock;

=====

ملاحظات إضافية:

أداء performance.now ضد Date.now يجوز ويجب أن تختلف على Intel مقابل AMD CPU

They are using different processor instructions to get time, please look here for some details, http://zeromq.org/results:more-precise-0mq-tests

0
وأضاف