माना कि समाधान @abarber द्वारा प्रस्तावित यह एक अच्छा समाधान है क्योंकि इसका उपयोग करता है (new Date()).getTime()
इसलिए इसमें मिलीसेकंड की खिड़कियां और योग हैंtick
इस अंतराल में टकराव के मामले में हम बिल्ट-इन का उपयोग करने पर विचार कर सकते हैं क्योंकि हम यहां कार्रवाई में स्पष्ट रूप से देख सकते हैं।
मुट्ठी हम यहाँ देख सकते हैं कि कैसे 1/1000 विंडो फ्रेम में टकराव हो सकता है (new Date()).getTime()
:
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1155:1 1469615396590
VM1155:1 1469615396591
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1156:1 1469615398845
VM1156:1 1469615398846
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1158:1 1469615403045
VM1158:1 1469615403045
दूसरा हम प्रस्तावित समाधान की कोशिश करते हैं जो 1/1000 विंडो में टकराव से बचता है:
console.log( window.mwUnique.getUniqueID() ); console.log( window.mwUnique.getUniqueID() );
VM1159:1 14696154132130
VM1159:1 14696154132131
कहा कि हम नोड जैसे फ़ंक्शन का उपयोग करने पर विचार कर सकते हैं process.nextTick
जिसे इवेंट लूप में एकल के रूप में कहा जाता है tick
और इसे यहां अच्छी तरह से समझाया गया है । निश्चित रूप से ब्राउज़र में ऐसा नहीं है process.nextTick
कि हमें यह पता लगाना है कि कैसे करना है।
यह कार्यान्वयन nextTick
ब्राउज़र में I / O के लिए सबसे नज़दीकी फ़ंक्शंस का उपयोग करते हुए एक फ़ंक्शन स्थापित करेगा setTimeout(fnc,0)
, जो हैं , setImmediate(fnc)
और window.requestAnimationFrame
। जैसा कि यहां बताया गया है कि हम इसे जोड़ सकते हैं window.postMessage
, लेकिन मैं इसे पाठक पर छोड़ता हूं क्योंकि इसे एक addEventListener
अच्छी तरह से आवश्यकता है । मैंने मूल मॉड्यूल संस्करणों को यहाँ सरल रखने के लिए संशोधित किया है:
getUniqueID = (c => {
if(typeof(nextTick)=='undefined')
nextTick = (function(window, prefixes, i, p, fnc) {
while (!fnc && i < prefixes.length) {
fnc = window[prefixes[i++] + 'equestAnimationFrame'];
}
return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};
})(window, 'r webkitR mozR msR oR'.split(' '), 0);
nextTick(() => {
return c( (new Date()).getTime() )
})
})
तो हमारे पास 1/1000 विंडो है:
getUniqueID(function(c) { console.log(c); });getUniqueID(function(c) { console.log(c); });
undefined
VM1160:1 1469615416965
VM1160:1 1469615416966