나는 딜레마가있다. 이 코드를 사용하여 고유 ID를 생성하고이를 쿠키 또는 로컬 저장소에 저장합니다. 이전 ID가 설정되지 않은 경우에만이 ID를 생성합니다. 그것 (또는 매우 짧은 간격에서) I 하나만 ID를 생성하는 시간의 약 90 %를 예상자바 스크립트 탭 간 코드 실행 동기화
//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를 읽고, 생성하고 저장하며, 하나의 탭에서만 실행되도록 코드를 잠 그려는 해킹 전략입니다. 자물쇠가 풀릴 때까지
탭이 분리되어 있기 때문에이 기능이 작동하지 않을 수도 있지만 읽기 및 쓰기를 위해 로컬 스토리지 객체를 잠글 수 있다고 생각 했습니까?
다른 솔루션에도 열려 있습니다.
업데이트 : 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