仅在必要时更改会话属性的值有什么好处吗?

Is there any benefit to changing the values of the session properties only where necessary?

我注意到有些人是这样做的。这让我想知道它是否有益。例如,我检查会话的任一属性是否满足给定条件。然后再次执行此操作,分别针对对象的每个 属性。

假设我有两个计数器。一旦其中一个超过 1,两者都应该被重置:

let notes = [];
if (req.session.counters[0] > 1 || req.session.counters[1] > 1) {
    notes.push("A counter has exceeded the limit.");
    if (req.session.counters[0] > 1) {
        req.session.counters[0] = 0;
    }
    if (req.session.counters[1] > 1) {
        req.session.counters[1] = 0;
    }
}

和这个差不多:

let notes = [];
if (req.session.counters[0] > 1 || req.session.counters[1] > 1) {
    notes.push("A counter has exceeded the limit.");
    req.session.counters[0] = 0;
    req.session.counters[1] = 0;
}

那么,有什么好处吗?比如更快的执行?或者它几乎毫无意义?

在你的第一个例子中,如果 counters[0] === 5 and counters[1] === 0.5,之后if-statement, counters[0] === 0 counters[1] === 0.5 而在第二个例子中,两者都是0。这不计数器不能为负值或小数值都没有关系。


忽略这一点,这将取决于您的会话值的持久化方式。

如果您只有一台服务器,您可以将这些值存储在内存中。在这种情况下,没有理由使用示例 #1。

如果您使用多个服务器并且用户可以在它们之间跳转但应该有相同的会话,那么值应该保存在 database/a key-value 存储中。所有服务器都会从 database/key-value 存储中读取值。写入单个整数的开销非常小,无论您使用的是什么数据库,但如果您有更大的写入,示例 #1 可能是值得的。写入磁盘或——“更糟”——写入网络比内存慢很多。

可读性是否胜过 micro-optimization,这取决于您的应用程序。在转向 opinion-based 答案时,我会说在这种情况下它绝对可以。