我有一個困境。我使用此代碼來生成唯一的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