@abarberによって提案されたソリューション(new Date()).getTime()
は、ミリ秒のウィンドウがありtick
、この間隔で衝突が発生した場合にaを合計するために使用するため、優れたソリューションであると想定すると、ここで実際に確認できるように組み込みを使用することを検討できます。
ここで、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