其实我也不知道实际效果能提升多少,也说不定是无用功……不过,感觉上应该是有效的。
在写PHP的时候,用了CI的框架,在多个程序员之间协作的话,为了方便调用,为了提高代码重用性,我一般都会让接口参数尽量简单化,基本上所传入的参数都是ID。
比如WEBGAME的一个读取玩家信息的函数,只传入这个玩家的ID,读取玩家某个道具的函数只传入玩家ID和道具ID。
于是后来就出现一个情况
我在一步操作里,经过A函数,A函数先要去读取玩家模型里某一个玩家的信息,然后再经过B函数,B函数只接收到玩家的ID,但又需要再次用到玩家的信息……
也就是说
A函数从数据库读取一次玩家信息
B函数再次从数据库读取一次玩家信息
曾经有一次我用$this->output->enable_profiler(TRUE);打印出所有的SQL语句,同一操作竟然被重复了近20次。太浪费了。
最后决定采用一个优化方法
改写读取玩家信息的函数,将玩家信息放进$this->player_info[$player_id]中,接着再次读取时,可以直接返回这个数据而不用再次读取数据库
以下是实现的函数
$reflash默认为0,表示优先读取$this->player_info[$player_id]的内容
$reflash为1时,强制从数据库中读取
$this->player_info[]设为数组是为了读取多个玩家信息时不冲突。