在应用启动期间将MySQL结果存储在对象中是否更有效率?

时间:2019-06-20 21:06:25

标签: mysql node.js

当我启动Node应用程序时,我将存储“静态” MySQL数据,例如游戏任务和游戏怪兽,这些数据不会在全局对象中进行修改。我不确定用这种方式或每次需要时检索数据是否更有效。示例代码:

global.monsters;

doConn.query('SELECT * FROM monsters', function(error, results) {
    if (error) {
        throw error;
    }
    console.log('[MYSQL] Loaded monsters');
    monsters = results;
});

1 个答案:

答案 0 :(得分:0)

有一个重要的代码效率概念,称为loop-invariant。它指的是在每次循环迭代中保持不变的任何事物。

示例:

for loop := range 1..100 {
  m = 42
  // other statements...
}

m被分配100次固定值。为什么要100次?为什么不在循环之前或之后分配一次,并节省99%的工作?

m = 42
for loop := range 1..100 {
  // other statements...
}

某些编译器可以在编译步骤中将此代码分解出来。但也许不是Node.js。即使可以将其排除在外,如果您在循环外使用循环不变的语句编写代码,那么对于读者来说代码也将更加清晰。否则,读者将浪费他们的注意力,试图弄清楚该语句是否在循环内。

m = 42的示例非常简单,但是可能会有更复杂的代码,它们仍然是循环不变的。就像从数据库中查询数据一样,您要问的问题。

每个规则都有例外。例如,即使在玩家玩游戏时,有关怪物的某些数据也可能会经常更改,因此您的游戏可能需要反复查询,以确保始终拥有最新数据。

但是通常,如果在程序开始时查询一次就可以确定正确的查询,那么比重复查询要好。