Предполагая, что решение, предложенное @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
функцию в браузере , используя самые близкие функции ввода / вывода в браузере, которые 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