Javascript-ID冲突的几率
Javascript - Odds of ID Collision
只是好奇下面的"uniqueID"变量发生ID冲突的几率是多少:
var uniqueID = new Date().getTime() + '-xxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
我意识到我可以使用GUID来创建一个"全局唯一"的ID。然而,出于我们的目的,"足够唯一"可能会满足我们的要求。我只是想从数学上知道这种方法发生碰撞的可能性是多少。
您的时间戳以毫秒为单位,因此如果在同一毫秒内生成两个,它们碰撞的几率很低,但不是零。
现在,通常认为Math.random()是一致的,碰撞的几率只是两个Math.randum()调用碰撞的几率,乘以您正在执行的Math.random[(]调用的数量。。。。但你添加了一些"聪明"的东西,实际上会对几率产生灾难性影响:
r = Math.random() * 16; // good: a random float between 0 and 16
r = Math.random() * 16 | 0; // bad: a random int between 0 and 16
|0
将极其丰富的浮点随机数转换为32位整数,丢失了所有可以防止冲突的可爱位。
我不知道为什么,但你添加了它,它使碰撞的几率更高:在每一步中,碰撞的几率现在都很可能是1/16,所以总几率是(1/16)乘以"字符串中x
es的数量"。
基本上他们是不必要的高,我会拒绝这个发电机。这很奇怪,尤其是因为你可以使用一些直接的Math.random(),或者如果你想要真正的唯一性,可以使用实际的唯一性标准,并与等序列id生成器配对
var nextid = (function(id) {
id = id || 0;
return function() { return id++; };
}(firstIdToUse)); // <- optional seed value
现在,您的唯一性完全受到JavaScript中Number类型的限制。这大约是2^53个唯一的数字。如果你需要播种的话,这是很琐碎的。
相关文章:
- Javascript-ID冲突的几率
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- Pg承诺性能提升:在冲突中
- 数据与Javascript中的继承冲突
- Angular ng控制器与ng应用程序冲突
- 返回按钮代码段的Jquery冲突
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- 使用JavaScript和HTML5画布进行冲突检测
- javascript对象原型与jquery冲突
- jQuery与导航菜单上的mouseover事件冲突.
- Javascript滑块不滑动,如何判断是否存在JS冲突
- Bing语音和Bing地图在Windows 8应用商店应用程序中冲突
- Javascript两个日期选择器冲突
- Sequelize:属性之间的命名冲突'播放列表'以及关联'播放列表'
- 2D Processingjs游戏中的冲突
- 为什么'滚动到顶部'脚本导致类型错误?jQuery冲突
- 防止WordPress javascript冲突的良好实践
- JQuery手风琴菜单与mmenu冲突-JQuery 1.4 vs 1.7
- Greasemonkey1.0中的jQuery与使用jQuery的网站冲突
- 如何解决jQuery冲突