ধরে নেওয়া হয়েছে যে প্রস্তাবিত সমাধানটি @ বারবার সমাধানটি এটি একটি ভাল সমাধান কারণ (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ব্রাউজার আছে মধ্যে ইনপুট / আউটপুট সবচেয়ে কাছাকাছি ফাংশন ব্যবহার করে ব্রাউজারে ফাংশন 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