计算机科学中的幂等

最近在写后台的页面的一些功能,发现忽略了很多细节的操作,例如像幂等的操作就被忽略了。

幂等

计算机科学中的幂等大致可以理解为:一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

幂等在分布式系统中尤为重要,因为网络通讯的情况下如果重发了请求在没有做幂等操作的情况下可能就会造成很大的影响。

那么在前端的优化中,幂等也是很重要的一点。

比如前端的表单 or button 在没有修改的情况下或者是在短时间内连续的点击那么很有可能是用户的误操作或者 点击暴躁症 的表现。

在这种情况下即使后端做了这种请求的判断前端也应该在用户交互的层面上直接return 掉用户 “多余” 的操作。

在实际开发中可能会遇到 Object 和 Array 的判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 判断数组相等
function equalsArray(target, array) {
if (!array || !target) {
return false;
}
if (target.length !== array.length) {
return false;
}
for (let i = 0; i < target.length; i++) {
// nested arrays
if (target[i] instanceof Array && array[i] instanceof Array) {
if (!equalsArray(target[i], array[i])) {
return false;
}
} else if (target[i] !== array[i]) {
// two different object instances will never be equal
return false;
}
}
return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 判断对象相等
function compare(obj1,obj2) {
if (Object.keys(obj1).length !== Object.keys(obj2).length){
return false;
} else {
for (key in obj1) {
if (obj2.hasOwnProperty(key)) {
if (!Object.is(obj1[key], obj2[key])){
return false;
}
} else {
return false;
}
}
return true;
}
}
hi you can see me