Luajit脚本中加载字节码比加载字符串慢吗?

问题:

我一直在测试两种类型的大文件(大约20MB)。

第一种是一个字符串文件,大约有4000个函数,例如:

function dostuff1()
    <简单的Lua脚本>
end

function dostuff2()
    <简单的Lua脚本>
end

等等。 这些函数本身并不是特别重要,但是每个函数都有非常特定的重要的简单操作。

第二个文件只是使用以下命令生成文本文件的字节码版本:

luajit -b testfile1.lua testfile1.out

然后,我分别对它们进行测试(加载时间),并将它们加载到它们自己的env中,使用以下命令:

local env = {}
local chunk = loadfile( filename, 'bt', env )
assert(pcall(chunk()))

字符串文件的加载和处理速度明显比字节码文件快。这似乎与我所期望的相反。以下是一些比较的小样本。注意:某些文件中的函数比其他文件中的函数更复杂(因此时间差异比较大)。

字符串文件:

'#  File Load+Run: '    'test.tbl1'     '  Time: '      0.72784 '   Size:'      20877534
'#  File Load+Run: '    'test.tbl2'     '  Time: '      0.686193        '   Size:'      20880495
'#  File Load+Run: '    'test.tbl3'     '  Time: '      1.109813        '   Size:'      20824589
'#  File Load+Run: '    'test.tbl4'     '  Time: '      1.582231        '   Size:'      20827788

字节码文件:

'#  File Load+Run: '    'test.out1'     '  Time: '      0.379144        '   Size:'      17521943
'#  File Load+Run: '    'test.out2'     '  Time: '      0.95122 '   Size:'      17519371
'#  File Load+Run: '    'test.out3'     '  Time: '      2.954594        '   Size:'      18333035
'#  File Load+Run: '    'test.out4'     '  Time: '      7.236041        '   Size:'      18327247

奇怪的是,第一个文件在字节码中更快(这是我对它们所有文件的预期)。

这可以清楚地解释吗?我在许多地方(特别是在这里)搜索过,并没有找到任何类似的讨论(如果有,请告诉我)。

点赞