许多小的Lua脚本与几个大的脚本相比,性能如何?

我计划在我正在制作的游戏中使用 Lua 作为对象的脚本语言。然而,游戏中的每个对象(最多可能有1000个)都将附带自己的脚本。好的一面是,每个脚本都会非常短(少于256条指令)。

在这种情况下,相对于单个大脚本,性能会变慢,内存使用会增加吗?

点赞
用户869951
用户869951

假设你的程序有一个初始化阶段,在这个阶段你需要将每个脚本“编译”成一个代码块(只需一次),然后在对象发展的循环阶段,即需要调用代码块多次。在这种情况下,两种策略的性能是相同的,循环阶段的性能相同。在初始化阶段,可能会存在一些小差异:

  • 如果脚本存储在内存中,那么如果瓶颈在于调用loadstring函数(如果脚本非常短,可能会出现这种情况),则使用一个大脚本会使初始阶段更快。
  • 如果脚本存储在文件中,则读取1000个小文件可能比读取一个1000倍大的文件慢,但我认为只有在文件系统读取访问是瓶颈(而不是编译成代码块)时才会发生这种情况。

不过,通常你不必担心游戏的“init”(在此阶段会编译1000个脚本),只需要关心运行循环。如果是这种情况,我建议使用单个对象对应一个脚本的策略。单个对象对应一个脚本方法的另一个好处是你可以在需要时才编译对象的脚本,而不是在初始化时编译。例如,某些对象可能只在特定条件下活动;那么只有当条件第一次满足时才编译该脚本,并缓存代码块,这样你就不必再次编译(针对该对象)。

更新:

你可以在任何地方使用代码块,它只是对Lua代码块的引用。你甚至可以通过“...”关键字对代码块进行“参数化”,例如:

local arg1, arg2 = ...
print(arg1, arg2)

并将其绑定到变量“test”,这样你可以使用不同的参数值来调用代码块:

test(1, 2)
test('a', 'b')

这将得到:

1   2
a   b
2014-09-04 04:18:32