11548 sujets

JavaScript, DOM et API Web HTML5

La solution classique


function getUniqueID () { 
	var uniqueID = new Date();
	return uniqueID.getTime();
}


ne fait que générer un nombre de millisecondes.

Manque de bol j'ai un script qui tourne tellement vite que deux objects peuvent se choper la même ID et donc BOUM Smiley lol

Comment pourrait-on améliorer la function getUniqueID pour être certain que dans une même page l'ID renvoyé soit vraiment unique.

Evidement pas question de tester les ID précédemment générés.

Des idées ?
Modifié par Grumelo (21 Jun 2007 - 16:39)
Unique au sein du document, ou unique dans l'absolu ?

Si c'est au sein du document :

var lastId = 0;

function getUniqueId()
{
return lastId ++;
}

Modifié par Lanza (21 Jun 2007 - 16:43)
:D

Oui c'est vrai ta solution toute simple fonctionne parfaitement bien.
J'aime pas trop la variable globale car on n'est jamais à l'abri d'un conflict ou d'un écrasement.

je préfère une solution object du type


function UniqueIDObj(){
this.id = 0;
this.get = function(){this.id++;return this.id-1;}
}
var uniqueID = new UniqueIDObj();
alert (uniqueID.get());
alert (uniqueID.get());

Modifié par Grumelo (21 Jun 2007 - 17:36)
Mais sinon de façon plus absolue un ID unique c'est possible ?

En ajoutant un nombre aleatoire aux millisecondes par concatenation (et surtout pas addition) on réduit enormement les risques, non ?

Quelque chose du genre :


function() getUniqueID(){ 
var uniqueID = new Date();
var myRandom=Math.floor(Math.random()*1000)
return uniqueID.getTime()+''+myRandom;
}
LA solution UNIVERSELLE est CERTAINEMENT là :

http://en.wikipedia.org/wiki/UUID

Il faut juste que... on s'attache tous à s'en servir... universellement...

Tous les programmeurs en c / unix connaissent bien la disponibilité d'une telle fonction dans leurs librairies.
Combien en ont fait usage ?