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

时间:2014-09-04 03:56:38

标签: performance lua

我打算在我正在制作的游戏中使用Lua作为对象的脚本语言。但是,游戏中的每个对象(最多可能有1000个)都会附加自己的脚本。好的一面是,每个脚本都很短(少于256个指令)。

在这种情况下,相对于单个大脚本,性能是否会变慢并且内存使用率会高?

1 个答案:

答案 0 :(得分:2)

据推测,您的程序将有一个初始阶段,您可以在其中编译"每个脚本到一个块(只有一次),以及一个循环阶段,当对象进化时,即你根据需要多次调用块。在这种情况下,两个策略的性能在循环阶段是相同的。在初始阶段,可能存在一些小差异:

  • 如果脚本存储在内存中,那么" init"如果瓶颈是调用loadstring函数,那么使用一个大脚本可以加快阶段(如果脚本非常小,则可能)。
  • 如果脚本存储在文件中然后读取1000个小文件可能比读取1个文件要慢1000倍,但我猜这只有在文件系统读取访问是瓶颈的情况下才是真的(相比之下,编译成块) )。

但是你通常不会担心" init"游戏(在此期间编译1000个脚本),只是运行循环。如果是这种情况,我建议使用one-script-per-object策略。每个对象脚本方法的另一个优点是,您最终可以决定仅在需要时编译对象的脚本,这不一定在init之后立即编译。例如,某些物体可能仅在某些条件下才变得活跃;然后只在首次满足条件时编译脚本,并缓存块,这样你就不必再次编译(对于那个对象)。

更新:

你可以在任何地方使用chunk,它只是一个Lua代码的Lua引用。你甚至可以"参数化"通过" ..."关键字,所以如果您的块是多行字符串:

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

并将其绑定到变量' test'然后你可以用参数的不同值调用块:

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

将产生

1   2
a   b