Является ли загрузка байт-кода в сценарии Luajit более медленной, чем загрузка строк? - PullRequest
2 голосов
/ 04 марта 2020

Проблема:

Я тестировал два типа больших файлов (примерно 20 МБ).

Первый - это строковый файл, содержащий около 4000 функций, например:

function dostuff1()
    <simple lua script>
end

function dostuff2()
    <simple lua script>
end 

И так далее. Сами функции не слишком важны, но в каждой из них есть очень специфичные c важные простые операции.

Второй файл - это просто версия текстового файла, построенная на основе байт-кода, с использованием:

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

Странно первый файл быстрее в байт-коде (что я и ожидал для всех).

Можно ли это четко объяснить? Я искал во многих местах (здесь конкретно) и не смог найти каких-либо аналогичных обсуждений (дайте мне знать, если есть - пожалуйста).

...