我有一个困境。我使用此代码来生成唯一的ID并将其存储在Cookie或本地存储中。如果没有以前的ID设置,我只会生成此ID。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);
}
此代码的工作,因为我预期大约90%的时间,从而产生只有一个ID,但有时当与没有ID的用户打开的同时2个或多个突出部(或在非常短的间隔)它最终生成2个ID。 我感兴趣的是一些黑客策略,在读取,生成和存储ID时锁定代码,并且仅在一个选项卡中执行。直到锁定被释放。
我知道这可能不起作用,因为标签是分开的,但我在想,如果你能锁定一个本地存储对象的读写?
我也接受其他解决方案。
更新:有人问我怎么算法是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