私にはジレンマがあります。私は一意のIDを生成し、それをクッキーまたはローカルストレージに格納するためにこのコードを使用しています。以前のIDが設定されていない場合にのみ、このIDを生成します。それを(または非常に短い間隔で)私は1つのIDを生成し、時間の約90%を予想通りjavascriptタブ間でコードの実行を同期させよう
//read the ID from cookie or local storage
var id=readID();
if(id==null){
//no ID found, generate an ID
id=generateID();
//store the ID to use it when we come back
storeID(id);
}
このコードは動作し、時にはないIDを持つユーザーは、同じ時間内に2つの以上のタブを開いたとき2つのIDが生成されます。 私が興味を持っているのは、IDの読み取り、生成、保存時にコードをロックし、1つのタブでのみ実行するためのハッキング戦略です。ロックが解除されるまで
タブが分離されているため、これはうまくいかないかもしれませんが、読み書きの両方でローカルストレージオブジェクトをロックできると思っていましたか?
私は他のソリューションにもオープンしています。
更新:generateIDアルゴリズムがどのようになっているのですか?私はそれは問題ではありませんが、これは、我々はこのようなMath.random()
を使用します簡素化するために言う:
function generateID(){
return Math.random();
}
IDの生成にはどのくらいの時間がかかりますか? – FrankerZ
http://balpha.de/2012/03/javascript-concurrency-and-locking-the-html5-localstorage/ – SLaks
私はreadID()とgenerateIDが何をしているかを知る必要があると思うが、少なくともlocalstorageタブ間で通信する必要があります。参照のためにWeb Storage APIを見てください。 https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API – Ivan