javascript - हरण - जावास्क्रिप्ट से एक ब्राउज़र ईवेंट का टाइमस्टैम्प कहां से आता है?



जावास्क्रिप्ट क्या है (1)

DOM4 विनिर्देश §4.2 के मुताबिक , जब यह इवेंट बनता है तब उसे असाइन किया जाता है (आपको थोड़ा नीचे स्क्रॉल करना है):

timeStamp एट्रिब्यूट को उस मूल्य को वापस करना चाहिए जिसे इसे आरंभ किया गया था। जब कोई इवेंट बन जाता है, तो विशेषता 1 जनवरी 1970 को 00:00:00 UTC के बाद से मिली मिलीसेकंड की संख्या के लिए प्रारंभिक रूप से शुरू की जानी चाहिए, जो लीप सेकंडों की अनदेखी करते हैं।

किसके बारे में प्रश्न होता है: घटना कब बनायी गयी है? मुझे लगता है कि यह तीन बार हो सकता है:

  1. जब ओएस ब्राउज़र को सूचित करता है

  2. जब जावास्क्रिप्ट मुख्य UI थ्रेड अगले कुछ भी करने में सक्षम होता है

  3. जब जावास्क्रिप्ट मुख्य UI थ्रेड ईवेंट से संबंधित कार्य प्रेषित करने वाला है

नीचे स्निपेट का उपयोग करके, कम से कम click ईवेंट के लिए, यह ब्राउज़र के अनुसार भिन्न होता है:

  • क्रोम समय को असाइन कर रहा है स्टाम्प जब जावास्क्रिप्ट मुख्य यूआई थ्रेड घटना (# 3 ऊपर) को संभालने के लिए तैयार है; घटना वास्तव में हुआ होने के बाद यह काफी हो सकता है, भले ही मुख्य जावास्क्रिप्ट यूआई थ्रेड को अंतरिम में अन्य चीजें करने का मौका मिला। (मेरे लिए, यह बहुत ही आश्चर्य की बात थी।)

  • फ़ायरफ़ॉक्स समय को असाइन करते समय लगता है जब घटना होती है (ऊपर # 1), चाहे मुख्य जावास्क्रिप्ट यूआई धागा क्या कर रहा है यह वही है जो मुझे उम्मीद थी

  • IE ऐसा करता है जो क्रोम करता है (# 3), लेकिन मैं संभावना को रद्द नहीं कर सकता कि यह तीसरे क्लिक के लिए टाइमस्टैम्प को असाइन करेगा, जब दूसरा क्लिक संसाधित हो जाएगा (# 2), क्योंकि मैं इसे पहचान नहीं सकता जब चीजें व्यस्त हैं तो तीसरे बटन पर क्लिक करें

// Sadly, Firefox has a bug (https://bugzilla.mozilla.org/show_bug.cgi?id=77992) where
// timeStamp is not from The Epoch, it's from system start. So we work relative to the
// moment you clicked the first button rather than working with nice clean absolute data.

// Sadly, IE11 doesn't like you clicking the second button and then moving over to
// click the third, but the data from just clicking the second suggests it's more like
// Chrome than Firefox.
var start1;
var start2;
document.getElementById("start").addEventListener("click", function(e) {
  // Remember this event's timestamp
  start1 = e.timeStamp;
  start2 = 0;

  // Start a busy-loop for three seconds, locking up the main JS thread
  busy(3000);
  display("Done with first busy loop");
}, false);

document.getElementById("then1").addEventListener("click", function(e) {
  // Show time since first event
  showElapsed(e.timeStamp);

  // Remember this event's timetsamp
  start2 = e.timeStamp;

  // Another busy-loop, just a second this time
  busy(1000);
  display("Done with second busy loop");
}, false);

document.getElementById("then2").addEventListener("click", function(e) {
  // Show time since first and second events
  showElapsed(e.timeStamp);
}, false);

function showElapsed(ts) {
  display("Elapsed from first event: " + (ts - start1) + "ms");
  if (start2) {
    display("Elapsed from second event: " + (ts - start2) + "ms");
  }
}

function busy(duration) {
  var target = Date.now() + duration;
  while (Date.now () < target) {
    // Wait
  }
}

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = msg;
  document.body.appendChild(p);
}
function format(ts) {
  return new Date(ts).toISOString().substring(11, 23);
}
<input type="button" id="start" value="Click me">
<input type="button" id="then1" value="Then me quickly afterward">
<input type="button" id="then2" value="Then me quickly after that (not on IE!)">

https://src-bin.com

ईवेंट हैंडलर कॉलबैक के पास इवेंट ऑब्जेक्ट्स में एक इवेंट होता है। ईवेंट होने पर टाइमस्टैम्प, लेकिन टाइमस्टैम्प का उत्पादन कहाँ होता है? क्या ऐसा कुछ है जो अंतर्निहित ओएस से बुलबुले करता है, या यह ब्राउज़र द्वारा उत्पन्न होता है?

मुझे टाइमस्टैम्प की विश्वसनीयता का अनुमान लगाने में दिलचस्पी है और यह समझता हूं कि बाद के टाइमस्टैम्प को कम सटीक रूप से तैयार किया जाता है, जो इसे होने की संभावना है।

इसके अलावा, जिस तरह से टाइमस्टैम्प का उत्पादन किया जाता है वह प्लेटफ़ॉर्म और ब्राउज़र के कार्यान्वयन के बीच काफी भिन्न होता है?

धन्यवाद।






timing